1. RDB 快照
在指定的時間間隔內對數據進行快照存儲,存儲在 dump.rdb 二進制文件中redis
配置文件 redis-config:緩存
#快照文件名稱 dbfilename "dump.rdb" # 快照文件純粹的位置 dir "/user/local/redis/data" # 生成策略 save 900 1 save 300 10 save 60 1000 # 60秒內,達到1000次改動生成快照
優勢 :文件恢復速度快
缺點:未到達快照生成時間的狀況下,redis 宕機會丟失部分數據
存儲命令:
save:同步操做,會阻塞 redis 其餘命令,不會消耗額外內存
bgsave:異步操做,在生成子進程執行調用 fork 函數時 會有短暫阻塞,redis 後臺使用 bgsave 生成快照安全
2. AOF
記錄每次對服務器的寫操做
配置文件 redis-config:服務器
# 開啓 aof appendonly yes # 文件名 appendfilename "appendonly.aof" # 存放路徑 dir /user/local/redis/data # 配置策略,只容許選擇一個 #appendfsync always appendfsync everysec #appendfsync no
生成策略:
appendfsync always:每次有新的命令追加到 aof 文件時就執行一次 fsync,很是慢,同時很是安全
appendfsync everysec:每秒 fsync 一次,足夠快(和rdb差很少),而且在故障時只會丟失1秒鐘的數據。1秒內的數據會先寫到緩存裏,一次性寫到磁盤
appendfsync no:從不 fsync, 將數據交給操做系統來處理,更快,但更不安全app
aof 重寫:
根據當前內存數據從新生成命令行數據,保持在日誌文件中。
配置:
1. # auto-aof-rewrite-min-size 64 mb aof文件至少達到64M纔會自動重寫,文件過小恢復速度原本就很快,重寫的意義不大
2. # auto-aof-rewrite-percentage 100 aof 文件自上一次重寫,文件大小增加了100%則再次觸發重寫
手動重寫:
redis 客戶端執行命令 bgrewriteaof,rewrite 是 fork一個子進程來重寫日誌異步
優勢:數據更安全
缺點:文件恢復速度慢函數
3. Redis 4.0 混合持久化
配置:# aof-use-rdb-preamble yes
在 aof 重寫時,再也不是單純的將內存數據轉換爲resp命令寫入 aof 文件,而是將重寫這一刻以前的內存作 rdb 快照處理,而且將 rdb 快照內容和增量的 aof 修改內存數據命令存在一塊兒,都寫入新的 aof 文件,寫入的時候會生成一個新的問題件,等重寫完成後再覆蓋原有的 aof 文件。spa