redis 学习(18)-- AOF
redis -- AOF
什么是 AOF
通過日志方式將redis中的寫命令進行日志記錄,保存在硬盤文件中。
日志記錄的實質是將寫命令寫在硬盤的緩沖區中,再根據相關策略把數據刷新到磁盤中。
當redis服務器啟動時候,執行硬盤中的日志文件以恢復redis中的數據。
AOF 運行原理 - 創建
AOF 運行原理 - 恢復
AOF 的三種策略
1. always
含義:執行每條寫命令都會將寫命令寫到磁盤中
2. everysec
含義:每秒將數據從緩沖區刷到磁盤中,可能會丟失一秒的數據(redis 默認使用該策略)
3. no
含義:寫命令何時刷新的磁盤中,由操作系統來決定
AOF 重寫
注意這里的重寫并不是說將 redis 命令重新抽象成新的 redis 命令,再寫入 AOF 文件,而是執行 redis 命令后將內存中的數據進行回溯,重寫成 AOF 文件。
1. 重寫的作用
- 減少磁盤占用
- 加速AOF恢復速度
- 例如一萬次incr key 可以重寫為 set key 10000
2. AOF 重寫實現方式 - bgrewriteaof
客戶端發送出一條bgrewriteaof命令后,redis會fork一個子進程完成AOF重寫操作邏輯。
3. AOP 重寫實現方式 - AOF 重寫配置
- AOF配置項
| auto-aof-rewrite-min-size | 64MB | AOF文件重寫需要的尺寸,AOF多大時開啟重寫 |
| auto-aof-rewrite-percentage | 100 | AOF文件增長率 (當前AOF文件大小超過上一次重寫的AOF 文件大小的百分之多少才會重寫) |
AOF統計項
統計名含義 aof_current_size AOF當前尺寸(單位:字節) aof_base_size AOF上次啟動和重寫的尺寸(單位:字節) 自動觸發時機
- 當前 AOF 文件大小超過最小重寫尺寸
- 當前 AOF 文件大小超過上次重寫完的 AOF 尺寸的百分之多少(auto-aof-rewrite-percentage)
AOF 相關配置
| appendonly | yes | 開啟AOF |
| appendfilename | aof-${port}.aof | AOF文件名 |
| appendfsync | everysec | AOF策略 |
| dir | /redisDataPath | AOF文件所在目錄 |
| no-appendfsync-no-rewrite | yes | 在執行重寫時不進行AOF操作 |
| auto-aof-rewrite-percentage | 100 | AOF重寫配置(見上文) |
| auto-aof-rewrite-min-size | 64MB | AOF重寫配置(見上文) |
AOF 重寫原理
AOF重寫不會讀取老的AOF文件,而是根據當前服務器的狀態生成一份新的AOF文件,將老的AOF文件進行替換。
AOF 重寫流程
演示
redis 支持動態配置,我們開啟 AOF,其他配置保持不變。
conf set appendonly yes我們添加幾個數據:
在 /opt/soft/redis/data/ 目錄下查看,可以看到,AOF 文件已經生成了,使用 more 命令查看 aof 文件:
看得不太清楚,我們用 head 命令打印 aof 文件頭部信息:
使用重寫命令:
我們使用 dbszie 重新查看一下數據大小,可以看到文件非常小,只有三個 key:
打印一下重寫后的 appendonly.aof :
可以看到重寫后的命令變成了:
seletc 0 set counter 2 set counter redis rpush list a b c轉載于:https://www.cnblogs.com/weixuqin/p/10968836.html
總結
以上是生活随笔為你收集整理的redis 学习(18)-- AOF的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DS博客作业06--图
- 下一篇: timeval的时间转换成毫秒之后多大的