本章目標
- Redis配置文件
- Redis的存儲
- Redis的事務
- Redis發布訂閱
- Redis安全
Redis配置文件
在針對Redis進行進一步了解之前,我們首先務必需要了解一下Redis的配置文件“redis.conf”,該文件一般位於Redis的安裝目錄。例如:使用的是Ubuntu安裝的Redis,我可以在/etc/redis/redis.conf找到該文件。redis.conf 配置項說明如下所示
http://www.runoob.com/redis/redis-conf.html
Redis存儲
對於Redis對於數據的存儲保障,可以分為兩種方式來存儲Redis數據,一種是使用“快照”,另一種是“只追加文件”方式。
- 快照(RDB存儲)
- 只追加文(AOF存儲)
快照(RDB)
我們可以在Redis.conf找到如下段落
# save ""
save 900 1
save 300 10
save 60 10000
可以看到,Redis的配置中已經默認替我們開啟了快照模式的數據存儲,根據以上命令,該存儲規則是“如果在900秒內存儲1條記錄,進行快照;如果滿足300秒內存儲10條記錄,進行快照;如果滿足60秒內存儲10000條記錄,進行快照”,我們還可以針對快照存儲模式進一步的進行配置。
# The filename where to dump the DB
dbfilename dump.rdb
我們可以在redis.conf配置自定義快照存儲的路徑,以便我們進行數據恢復。
如果需要恢復數據,只需將備份文件 (dump.rdb) 移動到 redis 安裝目錄並啟動服務即可,如果不知道Redis的安裝目錄可以在Redis客戶端里面使用下面命令獲得。
CONFIG GET dir
只追加文件(AOF)
我們可以在配置文件中找到appendonly no
,將no改成yes;代表開啟AOF數據存儲方式。同樣,我們可以自定義備份文件存儲的位置。
appendfilename "appendonly.aof"
針對AOF的數據備份方式,有三種模式,分別是;
- always | 每次寫入命令都要寫入磁盤
- everysec | 每秒執行一次同步
- no | 讓操作系統來決定何時同步
我們可以在配置文件中,找到appendfsync everysec
修改適合自己的選擇。
備份數據的建議
- 創建一個定時任務,每小時和每天創建一個快照,保存在不同的文件夾里。
- 定時任務運行時,把太舊的文件進行刪除。例如只保留48小時的按小時創建的快照和一到兩個月的按天創建的快照。
- 每天確保一次把快照文件傳輸到數據中心外的地方進行保存,至少不能保存在Redis服務所在的服務器。
更多關於Redis數據的存儲可以訪問:https://segmentfault.com/a/1190000002906345
Redis事務
對於Redis的事務其實和我們在編寫JDBC的應用程序時所使用的事務是基本一致的,有一點區別是,當Redis的事務中有一條命令發生異常時,並不會對數據進行回滾;而JDBC會針對事務的回滾。也是說Redis事務並沒有維持其原子性。
Redis事務流程
- 批量操作在發送 EXEC 命令前被放入隊列緩存。
- 收到 EXEC 命令后進入事務執行,事務中任意命令執行失敗,其余的命令依然被執行。
- 在事務執行過程,其他客戶端提交的命令請求不會插入到事務執行命令序列中。
Redis事務命令
命令 | 詳解 |
---|---|
MULTI | 標記一個事務塊的開始。 |
EXEC | 執行所有事務塊內的命令。 |
DISCARD | 取消事務,放棄執行事務塊內的所有命令。 |
UNWATCH | 取消 WATCH 命令對所有 key 的監視。 |
Redis事務演示
Redis發布訂閱
Redis 發布訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。
發布
訂閱
Redis發布訂閱命令
命令 | 詳解 |
---|---|
PSUBSCRIBE pattern [pattern ...] | 訂閱一個或多個符合給定模式的頻道。 |
PUBSUB subcommand [argument [argument ...]] | 查看訂閱與發布系統狀態。 |
PUBLISH channel message | 將信息發送到指定的頻道。 |
PUNSUBSCRIBE [pattern [pattern ...]] | 退訂所有給定模式的頻道。 |
SUBSCRIBE channel [channel ...] | 訂閱給定的一個或多個頻道的信息。 |
UNSUBSCRIBE [channel [channel ...]] | 指退訂給定的頻道。 |
Redis發布訂閱演示
Redis安全
我們可以在Redis的配置文件中設置Redis密碼,在客戶端進行訪問Redis的時候會進行密碼驗證;
查看是否設置密碼
在Redis命令行中輸入命令 CONFIG get requirepass
設置密碼
我們可以在redis.conf中找到# requirepass foobared
將注釋去掉,設置成自己的密碼即可。