【Redis持久化】AOF持久化實驗

【Redis持久化】AOF持久化實驗

1. 單機版Redis下載、安裝以及生產環境啓動方案

8.1 學習內容

  1. AOF持久化配置
  2. AOF持久化實驗
  3. AOF rewrite
  4. AOF 破損文件修復
  5. AOF和RDB同時工作

8.2 AOF持久化配置

8.2.1 配置打開AOF持久化

AOF持久化默認是關閉的,默認是打開RDB持久化


appendonly yes

8.2.2 配置AOF同步策略(共三種)

  1. appendfsync always,每次寫入一條數據就執行一次fsync,性能太差,嚴重降低吞吐量。
  2. appendfsync everysec:每隔一秒執行一次fsync,最常使用配置,性能很高,每秒可以上萬。
  3. appendfsync no:不主動執行fsync,僅僅將數據寫入os cache就殺手不管了,然後是不是有自己的策略將數據同步到磁盤

在這裏插入圖片描述

8.3 AOF持久化實戰

  1. 先打開rdb,關閉aof,寫入一些數據,然後kill掉redis進程,接着重啓redis,查看數據是否還在。

#關閉redis
ps -ef|grep redis
kill -9 1689

#刪除redis_6397.pid文件
rm -rf /var/run/redis_6379.pid

# 關閉aof, appendonly no
vi /etc/redis/6379.conf

# 刪除/var/redis/6379目錄下面的備份文件
rm /var/redis/6379/*

# 重啓redis
cd /etc/init.d/
./redis_6379 start

# 設置k1
get k1

set k1 v1

get k1

#退出redis
exit

# 重啓redis
ps -ef|grep redis
kill -9 1689
rm -rf /var/run/redis_6379.pid
cd /etc/init.d/
./redis_6379 start

# 驗證k1的值是否存在

get k1

# 發現數據沒有恢復

關閉aof

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

  1. 打開AOF開關,寫入一些數據,然後kill掉redis進程,然後重啓redis,查看數據是否還存在。
  • 打開aof持久化開關
    在這裏插入圖片描述

  • aof數據備份

在這裏插入圖片描述

拓展:redis 進程啓動的時候,會直接從appendonly.aof中加載所有日誌,把內存中的數據恢復過來。

8.4 AOF rewrite

redis中的數據是有限的,很多數據會自動過期,可能會被用戶刪除,可能會被redis的緩存清除算法刪除。總之,當Redis空間不足時,會不斷淘汰掉舊的數據,會保留一些常用的數據在redis內存裏面

這種情況就會導致一個問題:redis中的數據會因爲空間問題,不斷刪除,但是AOF文件不會自動刪除數據,就會導致AOF文件不斷增大,即redis已刪除的數據也會保存在AOF日誌文件中

所有AOF會自動在後頭每個一定事件做rewrite操作,比如日誌已經存儲了100w數據,但是redis內存只剩下10萬數據;通過rewrite命令,就會基於內存中當前的10w數據構建一套最新的日誌到AOF中;覆蓋之前的老日誌,保證和redis內存數據量一致。

8.4.1 配置rewrite策略

# 超過AOF日誌大小的百分之多少,就進行rewrite
auto-aof-rewrite-percentage 100

# AOF最大大小
auto-aof-rewrite-min-size 64mb

比如上一次AOF rewrite之後,是128mb,

然後就會接着128m繼續寫AOF日誌,發現增長的比例,超過了100%,即256m,就可能觸發一次rewrite。

此時還要跟 min-size 64m去比較,256mb > 64mb,纔會去觸發rewrite

8.4.2 rewrite 原理

  1. redis fork一個子進程
  2. 子進程基於當前內存中的數據,構建新的aof日誌文件,開始往一個臨時的AOF文件中寫入日誌。
  3. redis主進程,介紹到client新的寫操作之後,在內存中寫入日誌,同時寫新的日誌文件,也往舊的aof日誌文件中吸入數據
  4. 子進程寫完新的日誌文件之後,redis主進程會將內存中新日誌再次追加到新的aof文件中
  5. 最後會將新的日誌文件替換掉舊的日誌文件

8.5 AOF破損文件的修復

redis-check-aof --fix appendonly.aof

8.6 AOF和RDB同時工作

  1. rdb 執行 快照文件的時候,redis 不會去執行 aof rewrite操作;redis在執行 aof rewrite時,就不會執行執行 rdb 快照操作。

  2. rdb 在執行生成快照文件操作時,如果redis想執行 aof rewrite操作,只有等rdb 備份完快照文件時,纔會去執行 aof rewrite。

  3. 在redis重啓的時候,如果redis備份目錄下面同步包含 rdb 快照文件 和 aof 日誌文件,會有些使用 aof日誌文件,一般來講,aof日誌文件數據比 rdb快照文件數據完整。

參考石衫老師 《億級流量電商詳情頁系統》課程筆記

親,如果覺得還不錯,點個讚唄!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章