一、資料持久化之RDB
1、RDB介紹
Redis 資料庫檔案,全稱 Redis DataBase,資料持久化方式之一,資料持久化默認方式,按照指定時間間隔,將記憶體中的資料及快照寫入硬碟
定義RDB檔案名
dbfilename "dump.rdb"
RDB指dump.rdb檔案; redis資料每次存盤,如果不指定持久化的方式,資料就會默認存入dump.rdb檔案中
2、相關配置
資料從記憶體保存到硬碟的頻率
save 900 1 # 900秒 (15分鐘) 且有1個key改變即存盤
save 300 10 # 300秒 (5分鐘) 且有10個key改變即存盤
save 60 10000 # 60秒 (1分鐘) 且有10000個key改變即存盤
手動存盤
save # 阻塞寫存盤
bgsave # 不阻塞寫存盤
阻塞寫存盤:即當記憶體中有1G大小的資料,執行了save命令,要寫入硬碟,這個程序需要1分鐘,則在這一分鐘的時間內,不允許向記憶體中存入資料
不阻塞寫存盤:即當記憶體中有1G大小的資料,執行了bgsave命令,要寫入硬碟,這個程序需要1分鐘,則在這一分鐘的時間內,是允許向記憶體中繼續存入資料的
save 將記憶體中的資料寫入到硬碟
# 洗掉原有的持久化檔案
[root@template ~]# rm /var/lib/redis/6379/*
[root@template redis-4.0.8]# redis-cli
127.0.0.1:6379> ping
PONG
# 添加資料
127.0.0.1:6379> mset v1 2 v2 4 v3 xx v4 66
OK
# 將記憶體中的資料馬上寫入到硬碟中(自動存盤的規則,需要滿足條件)
127.0.0.1:6379> SAVE
OK
127.0.0.1:6379> exit
# 采用默認持久化方式,資料存到dump.rdb中
[root@template ~]# ll /var/lib/redis/6379/
total 4
-rw-r--r--. 1 root root 231 Apr 17 20:02 dump.rd
重啟redis服務以后,資料依然存在
[root@template redis-4.0.8]# redis-cli shutdown
[root@template redis-4.0.8]# ps -ef | grep redis.conf
root 121839 1221 0 20:05 pts/0 00:00:00 grep --color=auto redis.conf
重新開啟redis服務
[root@template redis-4.0.8]# /etc/init.d/redis_6379 start
Starting Redis server...
查看當前庫下所有的資料,依然存在,資料永久存盤
[root@template redis-4.0.8]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> KEYS *
1) "site"
2) "student"
3) "v1"
4) "v4"
5) "v2"
6) "v3"
3、 資料備份與恢復
備份資料:備份dump.rdb 檔案到其他位置
恢復資料:拷貝備份檔案到資料庫目錄,啟動 redis 服務
redis服務器資料備份,備份dump.rdb檔案,到/opt目錄下
[root@template ~]# cp /var/lib/redis/6379/dump.rdb /opt/
將備份的資料拷貝給template,讓template擁有相同的資料
[root@template~]# scp /opt/dump.rdb [email protected]:/root/
進行redis的資料恢復,停止redis服務
[root@template~]# /etc/init.d/redis_6379 stop
# 洗掉template,redis持久化資料檔案
[root@template~]# rm -rf /var/lib/redis/6379/dump.rdb
# 將從template主機備份的檔案,拷貝到redis的資料目錄下
[root@template~]# cp /root/dump.rdb /var/lib/redis/6379/
# 重啟服務,會重新加載dump.rdb
[root@template~]# /etc/init.d/redis_6379 start
[root@template~]# redis-cli
127.0.0.1:6379> keys *
127.0.0.1:6379> exit
4、驗證redis自動存盤
實驗環境準備,停止redis服務
[root@template~]# redis-cli -h 192.168.11.10 -p 6350 -a 123456 shutdown
進入到redis默認路徑下,洗掉rdb資料檔案
[root@template~]# cd /var/lib/redis/6379/
[root@template~]# rm -rf dump.rdb
組態檔中修改存盤時間
[root@template ~]# vim /etc/redis/6379.conf
.......
219 save 900 1 #900秒 (15分鐘) 且有1個key改變即存盤,不修改
220 save 120 10 #120秒 (2分鐘) 且有10個key改變即存盤, 修改修改修改!!!!!
221 save 60 10000 #60秒(1分鐘)且有10000個key改變即存盤,不修改
啟動redis服務
[root@template ~]# /etc/init.d/redis_6379 start
連接redis,存入變數
[root@template ~]# redis-cli
向reids中連續存入10個以上的變數
127.0.0.1:6379> mset v1 1 v2 1 v3 1 v4 1 v5 1 v6 1 v8 1 v9 1 v10 1 v11 1
127.0.0.1:6379> keys *
127.0.0.1:6379> exit
在redis的資料目錄下,兩分鐘dump.rdb出現,驗證redis自動持久化成功
[root@template ~]# ls /var/lib/redis/6379
5、優點與缺點
RDB優點:
高性能的持久化實作 ——》 創建一個子行程來執行持久化,先將資料寫入臨時檔案,持久化程序結束后,再用這個臨時檔案替換上次持久化好的檔案;程序中主行程不做任何IO操作
1》持久化的效率高,因為是由一個單獨的子行程來負責將記憶體中的資料寫入到硬碟;
2》持久化程序:將當前行程中的資料生成快照檔案,替換上次的持久化檔案
PS:行程中的資料,指redis的所有資料,比較適合大規模資料恢復,且對資料完整性要求不是非常高的場合
恢復資料簡單,拷貝備份資料,重啟服務即可,因為RDB方式,有可能會丟失最后一次的持久化資料,使用時需要對資料完整性要求不高
RDB的缺點:
意外宕機時,丟失最后一次持久化的所有資料
1》redis 是每隔900秒(15分鐘),或者300秒(5分鐘),或者一分鐘變數改變10000次,會進行一次持久化(將記憶體資料寫入到硬碟);
2》如果在還沒有到達臨界點時(例如:一分鐘變數改變 9999次),硬碟損壞,會導致這9999次的資料丟失,
二、資料持久化之AOF
1、AOF介紹
Append Only File
追加方式記錄寫操作的檔案,記錄 redis 服務所有寫操作,不斷的將新的寫操作,追加到檔案的末尾,默認沒有啟用,使用cat命令可以查看檔案內容
2、開啟AOF持久化功能,在template 上操作
[root@template ~]# redis-cli
127.0.0.1:6379> keys *
127.0.0.1:6379> config set appendonly yes #開啟AOF持久化功能
127.0.0.1:6379> config rewrite #將臨時配置寫到組態檔中
127.0.0.1:6379> exit
[root@template ~]# ls /var/lib/redis/6379/
appendonly.aof dump.rdb
3、查看AOF相關配置,在template上操作
[root@template ~]# vim /etc/redis/6379.conf
673:appendonly yes # aof持久化已經啟用
677:appendfilename "appendonly.aof" # aof持久化存放資料的檔案名
4、AOF檔案記錄寫操作的方式
[root@template ~]# vim /etc/redis/6379.conf
702 # appendfsync always #always 在redis中每進行一次寫操作, 都會將記錄存入appendonly.aof中,并將資料持久化到 dump.rdb檔案中
703 appendfsync everysec #everysec 將寫操作記錄到appendonly.aof中,每秒執行一次,并將資料持久化到 dump.rdb檔案中
704 # appendfsync no # no 只把寫操作記錄到appendonly.aof中,不會進行RDB持久化(節省系統資源)
5、備份與恢復
備份資料:備份 appendonly.aof 檔案到其他位置
redis服務器資料備份,在template 上操作
[root@template ~]# cp /var/lib/redis/6379/appendonly.aof /opt/
將備份的aof資料檔案拷貝給node01,讓node01擁有相同的資料
[root@template ~]# scp /opt/appendonly.aof [email protected]:/root/
恢復資料:拷貝備份檔案到資料庫目錄,啟動 redis 服務
[root@node01~]# /etc/init.d/redis_6379 stop
[root@node01~]# rm -rf /var/lib/redis/6379/dump.rdb
[root@node01~]# cp appendonly.aof /var/lib/redis/6379/
開啟本機的AOF持久化功能
[root@node01~]# vim /etc/redis/6379.conf
673 appendonly yes #no 修改為yes,啟動AOF功能
[root@node01~]# /etc/init.d/redis_6379 start
[root@node01~]# redis-cli
127.0.0.1:6379> keys *
127.0.0.1:6379> exit
6、優化配置
日志檔案會不斷增大,何時觸發日志重寫?
auto-aof-rewrite-min-size 64mb //首次重寫觸發值
auto-aof-rewrite-percentage 100 //到達增長百分比,再次執行重寫
查看redis的日志優化配置,在template上操作
#當日志的資料第一次達到64mb時,會觸發重寫,重寫后檔案大小為50Mb
#繼續向日志中存入資料,日志大小為100Mb時,會觸發重寫,重寫后檔案大小為80Mb
#繼續向日志中存入資料,日志大小為160Mb時,會觸發重寫,重寫后檔案大小為140Mb
#繼續向日志中存入資料,日志大小為280Mb時,會觸發重寫,重寫后檔案大小為260Mb
[root@template~]# vim /etc/redis/6379.conf
744 auto-aof-rewrite-percentage 100
745 auto-aof-rewrite-min-size 64mb
7、AOF優點與缺點
AOF優點
可以靈活設定持久化方式,出現意外宕機時,僅可能丟失1秒的資料
AOF缺點
持久化檔案的體積通常會大于 RDB 方式,執行 fsync 策略時的速度可能會比 RDB 方式慢,驗證AOF存盤資料占用更多空間,在template上操作,統計appendonly.aof的行數
[root@node01 6379]# wc -l appendonly.aof
82 appendonly.aof
[root@node01 6379]# redis-cli
127.0.0.1:6379> set test 22
127.0.0.1:6379> exit #斷開redis連接
[root@node01 6379]# wc -l appendonly.aof #再次統計appendonly.aof的行數
94 appendonly.aof
8、生產環境的使用:
RDB和AOF持久化 需要同時開啟,RDB做持久化,AOF記錄redis執行命令
作者:ChAn 出處:http://www.cnblogs.com/sre-chan/-------------------------------------------
個性簽名:今天做了別人不想做的事,明天你就做得到別人做不到的事,嘗試你都不敢,你拿什么贏!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/550394.html
標籤:其他
上一篇:day03-Redis的客戶端
