您好,登錄后才能下訂單哦!
Redis支持2種持久化策略:snapshot方式和commandlog方式,前者通過將當前內存數據快照周期性寫入RDB文件來實現;后者通過在log中記錄Redis進程收到的寫操作來實現,下次Redis重啟時,回放commandlog來恢復數據狀態。
根據實際需求,用戶可以選擇完全禁用持久化,也可以在同一個Redis實例中同時啟用RDB和AOF。
特別注意:如果部署方式為主從,則不同實例的持久化時機最好錯開!避免master和slaves同時進入后臺持久化,這可能會降低系統的性能。
1. RDB相關配置
1) databases
配置db文件的數目,可以用select <dbid>指令為每個連接指定后續持久化時的db文件,新連接默認均使用db 0
2) save
SNAPSHOTTING的持久化方式有多種save策略可供選擇,而且支持混用,例如:
save 900 1
save 300 100
save 60 10000
上述配置的效果是:snapshotting會在3個條件中的任何一個滿足時被觸發:a. 900s內至少1個key有變化;b. 300s內至少100個key有變化;c. 60s內至少有10000個key有變化
save條件被觸發時,Redis通過fork子進程,由子進程在后臺實現異步dump磁盤。根據fork的寫時復制策略,若持久化過程中出現很多寫入請求,在最壞的情況下,需要的內存是當前數據集所占內存的2倍。
備注1:上述配置的3個觸發條件其實是逐次加強的,哪個條件先滿足就先觸發那個save策略。
備注2:如果業務不需要持久化或不需要RDB方式的持久化,可以通過注釋掉save配置項來實現
3) stop-writes-on-bgsave-error
指定Redis在后臺dump磁盤出錯時的行為,默認為yes,表示若后臺dump出錯,則RedisServer拒絕新的寫入請求,通過這種方式來引起用戶警覺,避免因用戶未發現異常而引起更大的事故。
4) rdbcompression
RDB文件是否壓縮存儲,若為yes,會在壓縮時消耗一點CPU,但省磁盤空間。
5) rdbchecksum
RDB文件是否需要CRC64校驗, 若為yes,會在生成RDB文件后計算其CRC64并將結果追加至文件尾,同樣,Redis啟動Load RDB時,也會先計算該文件的CRC64并與dump時的計算結果對比。
好處:可以嚴格保證RDB的完整性及安全性
代價:會在dump或load時損失10%的性能。如果要最大化Redis的性能,這個配置項應該用no關掉
6) dbfilename
指定RDB文件名,默認為dump.rdb
7) dir
指定RDB文件存放目錄的路徑,若包含多級路徑,則相關父路徑需事先mkdir出來,否則啟動失敗。
2. AOF相關配置
默認情況下,Redis以寫RDB文件的方式持久化數據(除非用戶主動禁用RDB方式的持久化)。若Redis進程掛掉或機器掉電,則上次save完成時刻至故障時刻這段時間內的新數據會丟失。AOF的引入可以將數據損失的程度減少到1秒或1條寫入指令。
1) appendonly
配置是否啟用AOF持久化,默認為no
2) appendfilename
指定aof文件名,默認為appendonly.aof
3) appendfsync
配置aof文件的同步方式,Redis支持3種方式:
a. no => redis不主動調用fsync,何時刷盤由OS來調度;
b. always => redis針對每個寫入命令均會主動調用fsync刷磁盤;
c. everysec => 每秒調一次fsync刷盤。
用戶可以根據業務對數據的敏感性選擇合適的同步策略。
4) no-appendfsync-on-rewrite
指定是否在后臺aof文件rewrite期間調用fsync,默認為no,表示要調用fsync(無論后臺是否有子進程在刷盤)。備注:Redis在后臺寫RDB文件或重寫afo文件期間會存在大量磁盤IO,此時,在某些linux系統中,調用fsync可能會阻塞。
5) auto-aof-rewrite-percentage
指定Redis重寫aof文件的條件,默認為100,表示與上次rewrite的aof文件大小相比,當前aof文件增長量超過上次afo文件大小的100%時,就會觸發background rewrite。若配置為0,則會禁用自動rewrite。
6) auto-aof-rewrite-min-size
指定觸發rewrite的aof文件大小。若aof文件小于該值,即使當前文件的增量比例達到auto-aof-rewrite-percentage的配置值,也不會觸發自動rewrite。即這兩個配置項同時滿足時,才會觸發rewrite。
3. 需要明確的問題
1)若同時啟用RDB和AFO兩種持久化方式,則Redis Server啟動時,會加載AOF文件以重建數據集,因為AOF可以保證數據是相對最完整的。
2)關于RDB和AOF各自的優缺點以及用戶如何選擇合適的持久化策略,可以參考這里。
3)簡言之,若可以忍受數據丟失,只啟用RDB即可;若對數據很敏感,可以同時啟用RDB和AOF;不建議只啟用AOF(注釋配置文件的save配置項或通過redis-cli執行save ""),因為一旦如果AOF文件損壞或AOF解析引擎存在bug,整個數據集都無法重建。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。