1. 程式人生 > 資料庫 >5.Redis 持久化

5.Redis 持久化

1.Redis 持久化 有兩種方式: 快照---RDB檔案; 追加式檔案---AOF檔案(日誌記錄)
  • RDB 持久化方式會在一個特定的間隔儲存那個時間點的一個數據快照.
  • AOF 持久化方式則會記錄每一個伺服器收到的寫操作. 在服務啟動時, 這些記錄的操作會逐條執行從而重建出原來的資料. 寫操作命令記錄的格式跟 Redis 協議一致, 以追加的方式進行儲存.
  • Redis 的持久化是可以禁用的, 就是說你可以讓資料的生命週期只存在於伺服器的執行時間裡.
  • 兩種方式的持久化是可以同時存在的, 但是當 Redis 重啟時, AOF檔案會被優先用於重建資料.
注意:面試會問到 RDB 和AOF 如何適用範圍            可以從對資料完整性來說 RDB 儲存的資料不是那麼全 而 Aof 相對比較全 但耗效能           再從資料備份來說 RDB比較合適 定時生成 RDB 快照非常便於進行資料庫備份,並且 RDB 恢復資料集的速度也要比 AOF 恢復的速度快。   當然了,Redis 支援同時開啟 RDB 和 AOF,系統重啟後,Redis 會優先使用 AOF 來恢復資料,這樣丟失的資料會最少。   2.RDB 工作原理:      Redis 呼叫fork() 產生一個子程序 ,先把資料寫到一個臨時的RDB檔案中,當子程序寫完新的RDB檔案後      就把舊的RDB檔案直接替換掉。    2.1.檔案路徑和名稱:   預設快照檔案儲存在 當前目錄下一個名為 dump.rdb 的檔案. 要修改檔案的儲存路徑和名稱, 可以通過修改配置檔案  redis.conf 實現: (我是在redis檔案目錄下建立了一個working目錄  用來儲存 .rdb)
# RDB檔名,預設為dump.rdb。
dbfilename dump.rdb
 
 
# 檔案存放的目錄,AOF檔案同樣存放在此目錄下。預設為當前工作目錄。
dir /usr/local/redis/working
   2.2.儲存點(RDB的啟用和禁用) 都在redis.conf 檔案中          你可以配置儲存點, 使 Redis 如果在每 N 秒後資料發生了 M 次改變就儲存快照檔案. 例如下面這個儲存點配置表示每 60 秒, 如果資料發生了 1000 次以上的變動, Redis就會自動儲存快照檔案:   save 60 1000         當然也可以儲存多個 redis.conf 配置檔案預設設定了 3個         如果想禁用快照儲存的功能, 可以通過註釋掉所有 "save" 配置達到,或者在最後一條 "save" 配置後新增如下的配置:      
  save ""
3.AOF         快照並不是很可靠. 如果你的電腦突然宕機了, 或者電源斷了, 又或者不小心殺掉了程序, 那麼最新的資料就會丟失.而 AOF 檔案則提供了一種更為可靠的持久化方式. 每當 Redis 接受到會修改資料集的命令時, 就會把命令追加到 AOF 檔案裡, 當你重啟 Redis 時, AOF 裡的命令會被重新執行一次, 重建資料.   3.啟用AOF      把配置項 appendonly 設為 yes:  

3.1檔案路徑和名稱

# 檔案存放目錄,與RDB共用。預設為當前工作目錄。
dir /usr/local/redis/working
 
 
# 預設檔名為appendonly.aof
appendfilename "appendonly.aof"
3.2可靠性 你可以配置 Redis 呼叫 fsync 的頻率, 有三個選項:
  • 每當有新命令追加到 AOF 的時候呼叫 fsync. 速度最慢, 最安全.
  • 每秒 fsync 一次. 速度快 (2.4版本跟快照方式速度差不多), 安全性不錯 (最多丟失 1 秒的資料).
  • 從不 fsync, 交由系統去處理. 這個方式速度最快, 但是安全性一般.
推薦使用每秒 fsync 一次的方式 (預設的方式), 因為它速度快, 安全性也不錯. 相關配置如下:  
# appendfsync always
appendfsync everysec
# appendfsync no

 

  3.3 AOF 重寫     簡單來說 當.aof 到達設定的值大小後 會重寫日誌 其實就是精簡 可以理解為 本來有100記錄  重寫後 就只有50條了。