【Redis持久化】AOF持久化實驗
文章目錄
8.1 學習內容
- AOF持久化配置
- AOF持久化實驗
- AOF rewrite
- AOF 破損文件修復
- AOF和RDB同時工作
8.2 AOF持久化配置
8.2.1 配置打開AOF持久化
AOF持久化默認是關閉的,默認是打開RDB持久化
appendonly yes
8.2.2 配置AOF同步策略(共三種)
- appendfsync always,每次寫入一條數據就執行一次fsync,性能太差,嚴重降低吞吐量。
- appendfsync everysec:每隔一秒執行一次fsync,最常使用配置,性能很高,每秒可以上萬。
- appendfsync no:不主動執行fsync,僅僅將數據寫入os cache就殺手不管了,然後是不是有自己的策略將數據同步到磁盤
8.3 AOF持久化實戰
- 先打開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
- 打開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 原理
- redis fork一個子進程
- 子進程基於當前內存中的數據,構建新的aof日誌文件,開始往一個臨時的AOF文件中寫入日誌。
- redis主進程,介紹到client新的寫操作之後,在內存中寫入日誌,同時寫新的日誌文件,也往舊的aof日誌文件中吸入數據
- 子進程寫完新的日誌文件之後,redis主進程會將內存中新日誌再次追加到新的aof文件中
- 最後會將新的日誌文件替換掉舊的日誌文件
8.5 AOF破損文件的修復
redis-check-aof --fix appendonly.aof
8.6 AOF和RDB同時工作
-
rdb 執行 快照文件的時候,redis 不會去執行 aof rewrite操作;redis在執行 aof rewrite時,就不會執行執行 rdb 快照操作。
-
rdb 在執行生成快照文件操作時,如果redis想執行 aof rewrite操作,只有等rdb 備份完快照文件時,纔會去執行 aof rewrite。
-
在redis重啓的時候,如果redis備份目錄下面同步包含 rdb 快照文件 和 aof 日誌文件,會有些使用 aof日誌文件,一般來講,aof日誌文件數據比 rdb快照文件數據完整。
參考石衫老師 《億級流量電商詳情頁系統》課程筆記
親,如果覺得還不錯,點個讚唄!!!