1. 程式人生 > >Redis持久化RDB/AOF

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"