Redis持久化AOF

1. AOF(Append only file)是什么?

以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件。redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容,将写指令从前到后执行一次以完成数据的恢复工作

2.AOF持久化流程

  1. 客户端的请求写命令会被append追加到AOF缓冲区内
  2. AOF 缓冲区根据AOF持久化策略【always,everysec,no】将操作sync同步到磁盘的AOF文件中
  3. AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩Aof文件容量(将流水账命令,整合为一条命令)
  4. reids服务重启时,会重新load加载aof文件中的写操作,达到数据恢复的目的

3. AOf和RDB同时开启,redis听谁的?

AOF和RDB同时开启,系统默认读取AOF的数据(数据不会存在丢失)

4. AOF文件异常修护

如果将aof文件中添加无关的字符,会导致启动redis时加载数据错误

[root@iZbp1htnoa70qlle394f3wZ bin]# reids-cli -p 3428
-bash: reids-cli: command not found

我们可以使用redis-check-aof --fix appendonly.aof命令来修复aof文件

[root@iZbp1htnoa70qlle394f3wZ bin]# redis-check-aof --fix appendonly.aof
0x 93: Expected prefix '*', got: 'h'
AOF analyzed: size=156, ok_up_to=147, diff=9
This will shrink the AOF from 156 bytes, with 9 bytes, to 147 bytes
Continue? [y/N]: y
Successfully truncated AOF

再次重启就不会报错了,并且数据加载正常

5. 优点

  • 备份机制更稳健,丢失数据概率更低
  • 可读的日志文本,通过操作AOF稳健,可以处理误操作。

6. 缺点

  • 比起RDB占用更多的磁盘空间
  • 恢复备份速度要慢
  • 每次读写都要同步,有一定的性能压力
  • 有BUG 造成恢复不能

7. 用哪个好?

  • 官方推荐两个都启用
  • 如果对数据不敏感,可以单独用RDB
  • 不建议单独用AOF 因为可能会出现Bug
  • 如果只是做纯内存缓存,可以都不用
posted @   小罗要有出息  阅读(55)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示