redis持久化重要說明
- redis數據存儲模式只有兩種
- cache-only
- 只做爲“緩存”服務,數據均在內存中,不持久化數據,服務停掉則數據全部丟失,且無恢復方法,高速但安全性低;
- persistence
- 數據不只是在內存中,還會以配置的持久化方式持久化到磁盤中,保證服務停止後數據還可以恢復。
- 持久化方式選擇
- Redis DataBase(簡稱RDB):默認開啓該種方法持久化數據
- 在某個條件滿足後觸發持久化操作,也稱爲一次快照(snapshot)操作,將所有數據寫入一個臨時文件,持久化結束後,用這個臨時文件替換上次持久化的文件,達到數據恢復的效果。
- snapshot觸發的時機,是有”間隔時間”和”變更次數”共同決定,同時符合2個條件纔會觸發snapshot,否則“變更次數”會被繼續累加到下一個“間隔時間”上。
- snapshot過程是啓動一個獨立的子進程完成,故並不阻塞客戶端請求。snapshot首先將數據寫入臨時文件,當成功結束後,將臨時文件重名爲dump.rdb。
- rdb優缺點說明
- 優點
- 文件緊湊
- 形式簡單即單rdb文件
- 由子進程完全獨立搞定對主進程無影響
- 恢復速度快
- 缺點
- 每次保存都是保存一個完整數據集的操作,持續時間可長可短,對丟失數據控制力不佳。
- 若數據量過大,造成CPU和IO壓力大,會影響主線程服務性能。
- 優點
- Append-only file (簡稱AOF)
- 將”寫操作+數據”以格式化指令的方式追加到操作日誌文件的尾部,”日誌文件”保存了歷史所有的操作過程
- 當server需要數據恢復時,可以直接replay此日誌文件,即可還原所有的操作過程。
- 由於aof操作是發生在後臺異步線程執行,可以採用no文件模式同步(交給操作系統策略同步)、每秒鐘fsync同步一次、每個寫入發生時fsync同步一次,默認爲每秒同步一次。
- aof也不是絕對無數據丟失的:aof是寫入內存cache,由後臺線程按照aof策略執行fsync,極端情況下依然會丟失相應的數據。
- aof優缺點說明
- 優點
- 數據持久化更及時、效果更好
- 尾部追加方式,且爲後臺線程執行,效果很好,亦不影響主線程服務性能。
- 自動進行aof日誌重寫和替換,達到適時瘦身的效果。
- 日誌文件爲文本形式,易讀易維護易修復。
- 缺點
- aof日誌文件體積一般比rdb方式要大。
- 在數據恢復時,aof的恢復速度一般是慢於rdb。
- 優點
- Redis DataBase(簡稱RDB):默認開啓該種方法持久化數據
- cache-only