Redis高階進階
目錄
本章目標
- Redis配置檔案
- Redis的儲存
- Redis的事務
- Redis釋出訂閱
- Redis安全
Redis配置檔案
在針對Redis進行進一步瞭解之前,我們首先務必需要了解一下Redis的配置檔案“ redis.conf ”,該檔案一般位於Redis的安裝目錄。例如:使用的是Ubuntu安裝的Redis,我可以在 /etc/redis/redis.conf 找到該檔案。redis.conf 配置項說明如下所示
ofollow,noindex" target="_blank">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
將註釋去掉,設定成自己的密碼即可。