iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
Software Development

Redis還在學系列 第 20

Day20 Redis架構實戰-持久化RDB+AOF

  • 分享至 

  • xImage
  •  

Redis持久化

Redis持久化模式->RDB+AOF

RDB+AOF兩種模式整合在一起,可以在特定的時間產生快照資料,也保存了所有Redis Server收到的所有操作成功的日誌,這樣在Redis Server啟動時可以先載入RDB的快照內容後,再載入AOF的日誌資料,即可讓資料遺失的可能降到最低.

  • Redis Server ver < 4.0
    • 優先使用AOF日誌檔載入,因為AOF所保存的內容較RDB更接近目前時間點.
  • Redis Server ver >= 4.0
    • 可以透過設定aof-use-rdb-preamble指定RDB檔案先載入後載入AOF日誌檔.
    • AOF檔案由兩個部分組成,上半部是RDB,下半部是持續寫入AOF日誌檔.
    • 因Redis Server啟動時會先載入RDB檔恢復大部分資料,然後再將RDB快照時間點後的內容透過AOF日誌檔恢復後續資料,通常這樣因為AOF檔案較小故恢復快減少資料的遺失.

https://ithelp.ithome.com.tw/upload/images/20211005/20111658PFeo6ZBpGC.png

# 需要先打開才會套用此模式
# 先載入rdb再載入aof
aof-use-rdb-preamble yes
# 模擬rdb save後再異動操作
127.0.0.1:6379> save
OK

# 執行多次操作寫入aof日誌檔
127.0.0.1:6379> set book 111
OK
127.0.0.1:6379> set book 222
OK
127.0.0.1:6379> set book 333
OK
127.0.0.1:6379> set book 444
OK
127.0.0.1:6379> set bool 555
OK

# 關閉Redis Server 不存rdb檔
127.0.0.1:6379> shutdown nosave

# 再次啟動Redis Server使用自己設定好的config
./redis-server /home/redis/config/redis.conf

# 結果如下
# Loading RDB prodyced by version 6.2.5
# RDB age 2 seconds
# RDB has an AOF tail
# Reading the remaining AOF tail...
# DB loaded from append only file: 0.001 seconds

BGREWRITEAOF

AOF是記錄了Redis Server所有操作成功的日誌,當操作的越多檔案越大,相對的啟動Redis Server時所需要花費的時間就會越長,在日誌內容中我們只需要關注的是Key的最後結果,所以可以透過BGREWRITEAOF將檔案相同的key操作匯總成最後一個.
(此時當用戶端繼續操作時,Redis Server除了寫入aof_buf以外,也會寫入rewrite buffer,並透過Redis的父Process會fork一個子Process獨立進行同步)

# 異動book的value多次
127.0.0.1:6379> set book abc
OK
127.0.0.1:6379> set book def
OK
127.0.0.1:6379> set book ghi
OK

https://ithelp.ithome.com.tw/upload/images/20211005/201116587PDuktSLLX.png

# aof日誌檔內容實際記錄
vi appendonly.aof

https://ithelp.ithome.com.tw/upload/images/20211005/20111658wgP5tX61LA.png

# 將日誌檔匯總
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started

確認AOF日誌檔案是否已經匯總

https://ithelp.ithome.com.tw/upload/images/20211005/20111658XInFpFAi0m.png


上一篇
Day19 Redis架構實戰-持久化AOF
下一篇
Day21 Redis架構實戰-高可用性
系列文
Redis還在學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言