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

2022-09-14 11:09:08 字數 4396 閱讀 3471

aof方式:

rdb方式:

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

如果按照準備工作中的方法安裝的redis,找到配置檔案,預設在如下位置

vi /etc/redis/6379.conf
修改這兩個配置

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

配置好以後,可以通過

service redis_6379 restart
重啟redis

然後檢視一下redis的data目錄,預設在如下位置:

ls /var/lib/redis/6379
顯示了aof檔案

[root@db01 6379]# ls /var/lib/redis/6379
通過redis-cli連上redis,執行一些命令

[root@db01 6379]# redis-cli

127.0.0.1:6379> mset k1 a k2 b k3 c k4 d

ok127.0.0.1:6379> set k5 e

ok127.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檔案內容

*2$6

select$10

*9$4

mset

$2k1$1a

$2k2$1b

$2k3$1c

$2k4$1d

*3$3

set$2

k5$1e*1

$8flushall

所有操作都被記錄下來了,假設我們要恢復摧毀前的資料,我們可以這樣操作,開啟aof檔案,並把最後一行的flushall操作刪除, 然後執行

重新連線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"

假設我們執行:

127.0.0.1:6379> set k1 123

ok127.0.0.1:6379> set k1 345

ok127.0.0.1:6379> del k1

(integer) 1

127.0.0.1:6379> set k1 786

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

*2$6

select$10

*3$3

set$2

k1$3

123*3

$3set

$2k1

$3345

*2$3

del$2

k1*3

$3set

$2k1

$3786

接下來我們開啟rewrite,

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

127.0.0.1:6379> bgrewriteaof
再次檢視aof檔案,變成了如下:

*2$6

select$10

*3$3

set$2

k1$3

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

auto-aof-rewrite-min-size

auto-aof-rewrite-percentage

引數含義見官方文件,不贅述。

將aof方式先停用

vi /etc/redis/6379.conf
將這個配置改為no

刪掉遺留的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

s**e 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

ok127.0.0.1:6379> set k2 b

ok127.0.0.1:6379> set k3 c

ok127.0.0.1:6379> set k4 5

ok127.0.0.1:6379> set k5 dd

ok127.0.0.1:6379> set k6 dasdfas

ok127.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檔案

Redis學習(六) Redis的持久化 AOF

aof是什麼 以日誌的形式來記錄每個寫操作,將redis執行過的所有指令記錄下來 讀操作不記錄 只許追加檔案,但不可以改寫檔案,redis啟動之初會讀取該檔案重新構建資料,換言之,redis重啟的話就根據日誌檔案的內容將寫指令從前到後執行一次以完成資料的恢復工作 配置 種方式在許多應用中已經足夠用了...

Redis學習 持久化

一 redis提供了哪些持久化機制 1 rdb持久化 該機制是指在指定的時間間隔內將記憶體中的資料集快照寫入磁碟。2 aof持久化 該機制將以日誌的形式記錄伺服器所處理的每乙個寫操作,在redis伺服器啟動之初會讀取該檔案來重新構建資料庫,以保證啟動後資料庫中的資料是完整的。3 無持久化 我們可以通...

Redis學習 五 Redis持久化

redis是乙個記憶體資料庫,那麼如果不做持久化的話,當redis伺服器守護程序退出,伺服器宕機,計算機斷電 就會導致記憶體中的資料丟失,如果redis只是作為乙個快取伺服器來用的話,那麼不會有什麼影響,但是如果作為乙個記憶體資料庫的話,當上面的情況發生就會出現丟失所有資料的重大事故 rdb red...