Redis是內存數據庫,爲了保證數據不在故障後丟失,Redis須要將數據持久化到硬盤上。redis
Redis持久化有兩種方式:一種是快照,全量備份。一種是AOF方式,連續增量方式。算法
RDB持久化就是把數據生成快照保存到硬盤的過程。每N分鐘數據發送了M次寫操做以後,從內存dump數據造成rdb文件,壓縮後放在備份目錄數據庫
Redis-Server主進程會Fork一個子進程在後臺生成RDB文件,主進程能夠在不阻塞線程狀況下接收其餘命令。在主進程Fork過程當中會產生阻塞,Fork完成後不在阻塞主進程,持久化工做交給子進程,子進程會生成一個臨時的快照文件,完成後會對原有文件進行替換。bash
在redis.conf文件中能夠設置每N秒以後M個Key發生了寫操做就保存快照。ui
格式爲:save <seconds> <changes>
save 900 1 # 900秒以後至少有1個Key發生寫操做
save 300 10 # 300秒以後至少有10個Key發生寫操做
save 60 10000 # 60秒以後至少有10000個Key發生寫操做
複製代碼
先檢查60秒以內是否有1000個寫操做,再檢查300秒以後是否有10個寫操做,最後檢查900秒以後是否有1個寫操做。spa
若是想要禁用RDB功能能夠註釋掉全部的save配置,也能夠將save配置改成save ""線程
RDB文件保存在dir配置的指定目錄下,默認爲redis-server啓動目錄,RDB文件文件名爲dbfilename配置,默認爲dump.rdb文件名,咱們能夠更改dir和dbfilename配置修改文件保存的路徑和文件名。code
dir ./
dbfilename dump.rdb
複製代碼
經過config set dir {newDir}
動態修改dir配置cdn
> config set dir /Users/JAVA/Redis/RDB
OK
複製代碼
經過config set dbfilename {newDbfilename}
動態修改RDB文件名稱server
> config set dbfilename backup.rdb
OK
複製代碼
RDB文件默認以LZF算法壓縮保存,rdbcompression配置默認爲yes,當改成no時表示不壓縮。
rdbcompression yes
複製代碼
經過config set rdbcompression {yes|no}
動態修改是否壓縮
當快照過程當中發生錯誤能夠經過stop-writes-on-bgsave-error配置禁止Redis再寫入數據,默認爲yes開啓。
stop-writes-on-bgsave-error yes
複製代碼
經過config set stop-writes-on-bgsave-error {yes|no}
動態修改是否開啓RDB文件快照過程出錯時禁止寫入數據到Redis
在版本5中,爲了保證RDB文件的完整性會在文件末尾加入一個CRC64的校驗碼。經過rdbchecksum配置是否開啓,若是配置爲no則使用0代替CRC64校驗碼,加載RDB文件時會跳過校驗。
rdbchecksum yes
複製代碼
經過config set rdbchecksum {yes|no}
動態修改是否添加校驗碼
save命令會使用阻塞主進程的方式生成RDB文件,這意味着生成RDB文件過程當中其餘命令將阻塞等待RDB文件生成完成。因此不建議在生產環境使用。
> save
OK
複製代碼
bgsave命令會使用和自動觸發生成RDB文件同樣,在後臺fork()一個子進程生成RDB文件。能夠經過lastsave命令查看是否成功。
> bgsave
Background saving started
> lastsave
(integer) 1565190498
複製代碼
本人深知水平有限,歡迎指正本文錯誤之處。