本文跟上一篇 Redis 數據持久化 - RDB 和 AOF 簡單介紹 緊密相關,主要介紹 redis 數據持久化如何配置,以及上一篇文章中存在的問題。redis
redis 的核心配置配置是 redis.conf ,本文是基於 redis-4.0.6 版本講解。緩存
默認狀況下,redis 中的 RDB 數據持久化是開啓的。 在 redis.conf 有以下一段默認配置:app
save 900 1 save 300 10 save 60 10000 # 可自行定義(不推薦更改),格式以下: # save <seconds> <changes>
配置說明:異步
好比 save 60 10000 表示若是 60s 內,有 10000 個 key 發生了改變,就保存一次快照,而且每次生成一個新的快照,都會覆蓋以前的老快照。操作系統
補充:.net
AOF持久化,默認是關閉的。 打開 redis.conf, 找到以下配置日誌
appendonly no # 改成 yes 就開啓了 AOF appendfilename "appendonly.aof" # aof 文件名 # appendfsync always appendfsync everysec # 默認 # appendfsync no
開啓 AOF 持久化以後,redis 每次接收到一條寫命令,會先寫入操做系統 cache 中,而後每隔必定時間再 fsync 一下,這就對應了上面的 appendfsync 配置code
fsync 三種策略blog
appendfsync always :每次寫入一條數據就執行一次fsync; appendfsync everysec:每隔一秒執行一次fsync; appendfsync no :不主動執行fsync, 有操做系統本身決定
redis 中有緩存淘汰策略,所以會出現數據自動過時,另外也可能會被用戶主動刪除,致使 redis 中數據變少了。進程
可是,雖然數據被刪除了,其對應的寫日誌還在 AOF 日誌文件中,而且由於 AOF 日誌文件就一個,所以這個文件會不斷變大~~
因此纔有了 rewrite 來解決這個問題,AOF 會自動在後臺每隔必定時間作 rewrite 操做。
好比日誌裏存放了 100w 條數據的寫日誌,而 redis 內存中的數據只有 10 w。
AOF 會基於當前內存中的 10w 條數據構建一個新的日誌文件,而後覆蓋以前的舊的日誌文件。
補充:
redis 2.4 以後,會自動進行 rewrite 操做
在redis.conf中,能夠配置 rewrite 策略
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 舉例說明上述配置的意義 好比說上一次 rewrite 以後,日誌文件大小是 128 MB 若是發現日誌文件增加的比例超過了100%(對應第一條配置),好比日誌文件變爲 300MB 而後就去跟 64 MB(對應第二條配置)作比較,若是大於 64 MB,纔會去觸發rewrite
若是 redis 在寫入 AOF 文件時,機器宕機可能會致使 AOF 文件破損 ,這時能夠用 redis-check-aof --fix 命令來修復破損的 AOF 文件
rewrite 流程
實踐是檢驗真理的惟一標準,只有動手實踐,才能真正體會 redis 是如何作數據恢復的,另外也能夠用記事本打開 rdb 快照文件和 aof 日誌文件,去看看裏面存的是什麼東西。