Redis持久化RDB/AOF
持久化RDB
Redis資料庫檔案--Redis DataBase
資料持久化方式之一,術語稱為Snapshot快照
按照指定時間間隔,將記憶體中的資料集快照寫入硬碟,恢復時,將快照檔案直接讀入記憶體
優點 | 缺點 |
---|---|
高效能的持久化實現 —建立一個子程序來執行持久化,先把資料寫入臨時檔案,持久化過程結束後,再用臨時檔案替換上次持久化的檔案;在持久化過程中主程序不做任何IO操作 適合大規模資料恢復,且對資料完整性要求不是非常高的場合 |
意外宕機時,最後一次持久化的資料會丟失 由於RDB是通過fork子程序來協助完成資料持久化工作的,因此,如果當資料集較大時,可能會導致整個伺服器停止服務幾百毫秒,甚至是1秒鐘。 |
相關配置引數 (配置檔案內)
檔名 dbfilename “dump.rdb” 預設存放在/var/lib/redis/6379/dump.rdb
阻塞寫存檔 save
不阻塞寫存檔 bgsave
[[email protected] 6379]# vim /etc/redis/6379.conf ... ############### SNAPSHOTTING ######## 217 # save "" //帶有#為啟用RDB 218 219 save 900 1 //900s內且有1次修改自動儲存到硬碟 220 save 300 10 //300s內10次 221 save 60 10000 //60s內10000次 //三個滿足一個即可 ... 236 stop-writes-on-bgsave-error yes //bgsave出錯時停止寫操作 ... 242 rdbcompression yes //壓縮 ... 251 rdbchecksum yes //在儲存快照後,使用crc16演算法做資料校驗 ... 254 dbfilename dump.rdb
使用RDB檔案恢復資料
1.備份資料 cp 資料庫目錄/dump.rdb 備份目錄
2.恢復資料 cp 備份目錄/dump.rdb 資料庫目錄
3.重啟redis服務 /etc/redis/redis_埠 start
[[email protected] ~]# redis-cli -h 192.168.4.50 -p 6350
192.168.4.50:6350> auth 123456
OK
192.168.4.50:6350> keys *
1) "link50"
2) "test"
3) "xin"
192.168.4.50:6350> shutdown
[ [email protected] ~]# cd /var/lib/redis/6379/
[[email protected] 6379]# cp dump.rdb dump.rdb.bak
[[email protected] 6379]# /etc/init.d/redis_6379 start
[[email protected] ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> flushall
192.168.4.50:6350> keys *
(empty list or set)
192.168.4.50:6350> shutdown
[[email protected] 6379]# rm -rf dump.rdb
[[email protected] 6379]# mv dump.rdb.bak dump.rdb
[[email protected] 6379]# /etc/init.d/redis_6379 start
[[email protected] ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> keys *
1) "link50"
2) "test"
3) "xin"
持久化之AOF
只做追加操作的檔案,Append Only File
不斷的將新的操作追加到檔案的末尾,使用cat命令可以檢視檔案內容
優點 | 缺點 |
---|---|
出現意外宕機時,僅可能丟失1秒的資料 可以靈活設定持久化方式: 同步持久化appendfsync always 非同步持久化appendfsync everysec |
體積通常會大於RDB方式 執行fsync策略時的速度可能會比RDB方式慢 |
相關檔案和引數
[[email protected] 6379]# vim /etc/redis/6379.conf
673 appendonly yes //啟用aof 預設為no
677 appendfilename "appendonly.aof" //指定檔名 預設路徑/var/lib//redis/6379/appendonly.aof
702 # appendfsync always //有新寫操作立即記錄
703 appendfsync everysec //每秒記錄一次
704 # appendfsync no //不同步到dump.rdb,只記錄到appendonly.aof
744 auto-aof-rewrite-percentage 100
745 auto-aof-rewrite-min-size 64mb
//預設配置當aof檔案是上次rewite後大小的1倍且檔案大於64M時觸發
使用AOF檔案恢復資料
備份資料:cp 資料庫目錄/appendonly.aof 備份目錄
恢復資料:cp 備份目錄/appendonly.aof 資料庫目錄/ 重啟服務
注:企業一般是同時使用這兩種持久化方式,不過AOF模式要優先於RDB模式,Redis會先讀取AOF檔案!
[[email protected] 6379]# vim /etc/redis/6379.conf
...
673 appendonly yes
...
677 appendfilename "appendonly.aof"
[[email protected] 6379]# /etc/init.d/redis_6379 restart
[[email protected] 6379]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> keys *
(empty list or set)
192.168.4.50:6350> set v1 123
OK
192.168.4.50:6350> set v2 456
OK
192.168.4.50:6350> set v3 789
OK
192.168.4.50:6350> keys *
1) "v2"
2) "v3"
3) "v1"
192.168.4.50:6350> exit
[[email protected] 6379]# ls
appendonly.aof dump.rdb
[[email protected] 6379]# cat appendonly.aof
*2
$6
SELECT
$1
0
*3
$3
...
set
$2
v3
$3
789
[[email protected] 6379]# cp appendonly.aof appendonly.aof.bak
[[email protected] 6379]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> FLUSHALL
OK
192.168.4.50:6350> keys *
(empty list or set)
192.168.4.50:6350> shutdown
[[email protected] 6379]# rm -rf appendonly.aof
[[email protected] 6379]# mv appendonly.aof.bak appendonly.aof
[[email protected] 6379]# /etc/init.d/redis_6379 start
[[email protected] 6379]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> keys *
1) "v2"
2) "v3"
3) "v1"