Redis學習筆記六:持久化實驗(AOF,RDB)


作者:Grey

原文地址:Redis學習筆記六:持久化實驗(AOF,RDB)

Redis幾種持久化方案介紹和對比

AOF方式:https://blog.csdn.net/ctwctw/article/details/105173842

RDB方式:https://blog.csdn.net/ctwctw/article/details/105265689

對比:https://blog.csdn.net/ctwctw/article/details/105147277

准備工作

安裝Redis,可以參考Redis學習筆記一:安裝和配置

AOF實驗

如果按照准備工作中的方法安裝的redis,找到配置文件,默認在如下位置

vi /etc/redis/6379.conf

修改這兩個配置

appendonly yes
appendfsync always
# appendfsync everysec
# appendfsync no

打開always選項,僅為了實驗用,生產環境慎用,或者用everysec。

配置好以后,可以通過

service redis_6379 restart

重啟redis

然后查看一下redis的data目錄,默認在如下位置:

ls /var/lib/redis/6379

顯示了aof文件

[root@db01 6379]# ls /var/lib/redis/6379
appendonly.aof

通過redis-cli連上redis,執行一些命令

[root@db01 6379]# redis-cli
127.0.0.1:6379> mset k1 a k2 b k3 c k4 d
OK
127.0.0.1:6379> set k5 e
OK
127.0.0.1:6379> mget k1 k2 k3 k4 k5
1) "a"
2) "b"
3) "c"
4) "d"
5) "e" 

模擬數據被摧毀操作,執行flushall

127.0.0.1:6379> flushall
OK

退出redis-cli客戶端,查看aof文件內容

[root@db01 6379]# cat /var/lib/redis/6379/appendonly.aof 
*2
$6
SELECT
$1
0
*9
$4
mset
$2
k1
$1
a
$2
k2
$1
b
$2
k3
$1
c
$2
k4
$1
d
*3
$3
set
$2
k5
$1
e
*1
$8
flushall

所有操作都被記錄下來了,假設我們要恢復摧毀前的數據,我們可以這樣操作,打開aof文件,並把最后一行的flushall操作刪除, 然后執行

redis-cli  --pipe < /var/lib/redis/6379/appendonly.aof

重新連接redis,查看數據,全部恢復:

[root@db01 6379]# redis-cli
127.0.0.1:6379> mget k1 k2 k3 k4 k5
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"

AOF的rewrite

假設我們執行:

127.0.0.1:6379> set k1 123
OK
127.0.0.1:6379> set k1 345
OK
127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> set k1 786

其實只需要保留最后一條執行結果即可,如果我們不開啟rewrite, 那么aof文件內容會是這樣:

[root@db01 6379]# cat appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
set
$2
k1
$3
123
*3
$3
set
$2
k1
$3
345
*2
$3
del
$2
k1
*3
$3
set
$2
k1
$3
786

接下來我們開啟rewrite,

連接redis-cli, 執行如下命令

127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started

再次查看aof文件,變成了如下:

[root@db01 6379]# cat appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
SET
$2
k1
$3
786

也可以通過配置兩個參數來自動觸發rewrite,具體參數為:

auto-aof-rewrite-min-size
auto-aof-rewrite-percentage

參數含義見官方文檔,不贅述。

RDB實驗

將aof方式先停用

vi /etc/redis/6379.conf

將這個配置改為no

appendonly no

刪掉遺留的aof文件

rm -rf /var/lib/redis/6379/appendonly.aof

進入redis-cli,並清庫

flushall

然后刪掉dump.rdb文件

rm -rf /var/lib/redis/6379/dump.rdb

經過如上操作,redis目前數據為空,且備份文件也為空,關閉了aof策略,現在開始修改redis的配置文件,配置rdb的策略

vi /etc/redis/6379.conf

配置如下信息

# 60秒之內,至少有5個key發生變化,就觸發rdb
save 60 5

# 默認的rdb文件名為:dump.rdb
dbfilename dump.rdb

# 默認rdb文件的位置
dir /var/lib/redis/6379

配置修改完畢

重啟redis

重新連接redis-cli, 快速執行一些操作(一分鍾之內至少set 5個key)

127.0.0.1:6379> set k1 a
OK
127.0.0.1:6379> set k2 b
OK
127.0.0.1:6379> set k3 c
OK
127.0.0.1:6379> set k4 5
OK
127.0.0.1:6379> set k5 dd
OK
127.0.0.1:6379> set k6 dasdfas
OK
127.0.0.1:6379> set k7 5sdfas

將生成的dump.rdb文件先重命名

 mv /var/lib/redis/6379/dump.rdb /var/lib/redis/6379/dump.rdb.backup

重新連接redis-cli。模擬摧毀數據操作

flushall

停掉redis

service redis_6379 stop

將備份的dump文件重新還原

 mv /var/lib/redis/6379/dump.rdb.backup /var/lib/redis/6379/dump.rdb

重新啟動redis

service redis_6379 start

重新連接redis-cli,查看數據是否恢復

[root@db01 6379]# redis-cli
127.0.0.1:6379> keys *
1) "k1"
2) "k5"
3) "k2"
4) "k3"
5) "k6"
6) "k4"
7) "k7"
127.0.0.1:6379> mget k1 k2 k3 k4 k5 k6 k7
1) "a"
2) "b"
3) "c"
4) "5"
5) "dd"
6) "dasdfas"
7) "5sdfas"

如上,數據全部恢復。

混合方式

Redis 4.0 后持久化新增混合持久化,混合持久化指的是在開啟后,將持久化文件同時以RDB格式和AOF格式 一塊寫入aof文件中,將aof重寫的數據存入RDB中,在生成RDB中如果很大,則需要時間,那么這段時間客戶端對redis的操作,將會追加寫入aof文件,並且他們兩個最后一塊寫入aof文件中

混合持久化性能更優秀,同時兼顧RDB 和AOF ,解決aof重啟恢復慢,也同時進行AOF操作

修改配置文件

vi /etc/redis/6379.conf

配置如下幾項

# 開啟混合持久化
aof-use-rdb-preamble yes

# 默認是64mb,為了模擬效果,我臨時改成0mb,這樣的話,每次都會觸發混合模式
auto-aof-rewrite-min-size 0mb

重啟redis

重新連接redis-cli,快速執行一些操作,再一次查看aof文件

cat /var/lib/redis/6379/appendonly.aof 

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM