1. 程式人生 > >Redis高階進階

Redis高階進階

目錄

本章目標

  • 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)接收訊息。

釋出

pubsub2

訂閱

pubsub1

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 將註釋去掉,設定成自己的密碼即可。