Redis高併發3-redis數據持久化之rdb

內容大綱

一、如何配置RDB持久化機制
二、RDB持久化機制的工做流程
三、基於RDB持久化機制的數據恢復實驗redis

------------------------------------------------------------------------安全

一、如何配置RDB持久化機制

redis.conf文件,也就是/etc/redis/6379.conf,去配置持久化異步

# Important things to understand:
#
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""

save 900 1 #15分鐘一次值變化
save 300 10 #5分鐘10次值變化
save 60 1000 #1分鐘1w次變化

每隔60s,若是有超過1000個key發生了變動,那麼就生成一個新的dump.rdb文件,就是當前redis內存中完整的數據快照,這個操做也被稱之爲snapshotting,快照spa

也能夠手動調用save或者bgsave命令,同步或異步執行rdb快照生成線程

save能夠設置多個,就是多個snapshotting檢查點,每到一個檢查點,就會去check一下,是否有指定的key數量發生了變動,若是有,就生成一個新的dump.rdb文件code

------------------------------------------------------------------------進程

二、RDB持久化機制的工做流程

(1)redis根據配置本身嘗試去生成rdb快照文件
(2)fork一個子進程出來,這裏會有一個問題,原本rdb數據就是在內存中,同時又開啓一個子線程,子線程也會佔用內存...
(3)子進程嘗試將數據dump到臨時的rdb快照文件中
(4)完成rdb快照文件的生成以後,就替換以前的舊的快照文件內存

dump.rdb,每次生成一個新的快照,都會覆蓋以前的老快照rem

------------------------------------------------------------------------同步

三、基於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快照的生成,包括數據的丟失和恢復,全都演示過了  

相關文章
相關標籤/搜索