1、如何配置RDB持久化機制
redis.conf文件,也就是/etc/redis/6379.conf,去配置持久化
save 60 1000
每隔60s,如果有超過1000個key發生了變更,那么就生成一個新的dump.rdb文件,就是當前redis內存中完整的數據快照,這個操作也被稱之為snapshotting,快照
也可以手動調用save或者bgsave命令,同步或異步執行rdb快照生成
save可以設置多個,就是多個snapshotting檢查點,每到一個檢查點,就會去check一下,是否有指定的key數量發生了變更,如果有,就生成一個新的dump.rdb文件
2、RDB持久化機制的工作流程
(1)redis根據配置自己嘗試去生成rdb快照文件
(2)fork一個子進程出來
(3)子進程嘗試將數據dump到臨時的rdb快照文件中
(4)完成rdb快照文件的生成之后,就替換之前的舊的快照文件
dump.rdb,每次生成一個新的快照,都會覆蓋之前的老快照
3、基於RDB持久化機制的數據恢復實驗
(1)在redis中保存幾條數據,立即停掉redis進程,然后重啟redis,看看剛才插入的數據還在不在
數據還在,為什么?
帶出來一個知識點,通過redis-cli SHUTDOWN這種方式去停掉redis,其實是一種安全退出的模式,redis在退出的時候會將內存中的數據立即生成一份完整的rdb快照
/var/redis/6379/dump.rdb
(2)在redis中再保存幾條新的數據,用kill -9粗暴殺死redis進程,模擬redis故障異常退出,導致內存數據丟失的場景
這次就發現,redis進程異常被殺掉,數據沒有進dump文件,幾條最新的數據就丟失了
(2)手動設置一個save檢查點,save 5 1
(3)寫入幾條數據,等待5秒鍾,會發現自動進行了一次dump rdb快照,在dump.rdb中發現了數據
(4)異常停掉redis進程,再重新啟動redis,看剛才插入的數據還在
rdb的手動配置檢查點,以及rdb快照的生成,包括數據的丟失和恢復,全都演示過了
---------------------