当前位置: 首页 > ds >正文

Redis的两种持久化方式:RDB和AOF

Redis持久化概述

Redis作为内存数据库,数据存储在内存中。为了保证数据在服务器重启或宕机时不丢失,Redis提供了两种持久化方案:

RDB(Redis Database):定时生成内存快照

AOF(Append Only File):记录写操作命令

混合持久化:结合RDB和AOF优势

Redis持久化核心机制

1. RDB(Redis Database)持久化

核心原理

  • 快照机制:RDB通过生成内存数据快照(Snapshot)来持久化数据。快照是某个时间点的完整数据副本,保存为二进制文件(默认文件名为dump.rdb)。
  • 触发条件:
    • 手动触发:通过 SAVE(阻塞主线程)或 BGSAVE(后台异步)命令生成快照。
    • 自动触发:根据配置的规则(如 save <seconds> <changes>)自动执行BGSAVE,例如:
save 900 1    # 900秒内至少1次修改则触发
save 300 10    # 300秒内至少10次修改
save 60 10000  # 60秒内至少10000次修改

实现细节

  • 写时复制(Copy-On-Write,COW):
    • BGSAVE通过fork子进程生成快照,父进程继续处理请求。
    • 子进程共享父进程的内存页表,当父进程修改数据时,会触发COW机制,复制被修改的内存页,保证子进程的数据一致性。
  • 文件格式:
    • RDB文件是压缩的二进制文件,包含键值对、过期时间等信息。

优点

  • 高性能:二进制文件体积小,加载速度快(适合大规模数据恢复)。
  • 容灾备份:快照文件可定期备份到远程服务器。
  • 低资源占用:生成快照时主进程仅fork一次,对性能影响较小。

缺点

  • 数据丢失风险:两次快照之间的数据可能丢失(取决于触发频率)。
  • 大数据量时fork可能阻塞:数据量过大时,fork子进程可能耗时较长(内存越大越明显)。

适用场景

  • 需要快速恢复数据(如灾备)。
  • 允许分钟级数据丢失。
  • 对磁盘 I/O 和性能敏感的场景。

2. AOF(Append-Only-File)持久化

核心原理

  • 日志追加:AOF记录所有修改数据的命令(以Redis协议追加到文件末尾),重启时通过重放命令恢复数据。
  • 文件同步策略(通过appendfsync配置):
    • no:由操作系统决定何时同步(性能最高,但可能丢失较多数据)。
    • everysec:每秒同步一次(默认,最多丢失1秒数据)。
    • always:每次写命令都同步(最安全,但性能最差)。

实现细节

  • AOF重写(Rewrite):
    • 解决 AOF 文件膨胀问题,将当前内存数据生成等效的最小命令集,覆盖旧文件。
    • 触发方式:
      • 手动触发:通过 BGREWRITEAOF 命令。
      • 自动触发:根据 auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size 配置(如当 AOF 文件增长超过 100% 且大小超过 64MB 时触发)。

 优点

  • 数据安全性高:根据同步策略,最多丢失1秒(甚至零)数据。
  • 可读性强:AOF 文件是文本格式,便于人工分析或修复。
  • 灵活控制:支持动态调整同步策略。

缺点

  • 文件体积大:AOF 文件通常比 RDB 大。
  • 恢复速度慢:重放所有命令恢复数据,耗时长。
  • 写入压力大:高并发下频繁同步可能影响性能。

适用场景

  • 对数据完整性要求高(如金融场景)。
  • 允许牺牲部分性能换取更高可靠性。

3. RDB VS AOF 对比

4. 混合持久化(Redis 4.0+)

Redis 4.0引入了RDB-AOF混合模式,结合两者优势:

  • 开启方式:设置 aof-use-rdb-preamble yes
  • 实现原理触发持久化时,先以RDB格式保存全量数据快照,之后将增量命令以AOF格式追加到同一文件。最终生成的持久化文件前半部分是RDB二进制数据,后半部分是AOF命令。
    • AOF 文件由两部分组成:

      • RDB 格式的前半部分:保存快照时的数据。

      • AOF 格式的后半部分:保存快照后的增量命令。

  • 优点:

    • ​​​​​​​快速恢复:RDB格式加载速度快,减少重启时间。

    • 低数据丢失:AOF增量部分记录最新操作,数据安全性接近AOF。

    • 存储效率:相比纯AOF,混合文件通常更小。

http://www.xdnf.cn/news/2225.html

相关文章:

  • WPF核心技术解析与使用示例
  • 【Redis】基础2:作为缓存
  • 力扣刷题Day 31:删除链表的倒数第N个结点(19)
  • Linux之netlink(2)libnl使用介绍(1)
  • 6.2 内容生成与营销:个性化内容创作与营销策略优化
  • WPF大数据展示与分析性能优化方向及代码示例
  • ASP.NET MVC​ 入门指南三
  • 【JavaEE】Spring AOP的注解实现
  • ApplicationRunner的run方法与@PostConstruct注解
  • RPCRT4!NdrConformantStructUnmarshall函数分析
  • 模拟地与数字地单点接地的原理
  • 深度解析APPSCAN漏洞扫描:从入门到实战的全流程指南
  • 如何使用URDF搭建双臂UR移动机器人,并在RViz中可视化
  • c++11 :智能指针
  • QCustomPlot QCPItemText文字框可拖动
  • 关于vant4的showImagePreview在使用时可能出现布局显示不正常、缩放后拖动失效问题的粗暴解决方案
  • Jetbrains和Webstorm中设置自定义指令右键快捷键(自定义外部工具)
  • 检测特权访问活动:一个新的 Kibana 集成
  • [C]基础13.深入理解指针(5)
  • C++学习-入门到精通-【1】C++编程入门,输入/输出和运算符
  • Windows 10 系统关机后立即重启
  • 利用TTP协议 ETag + 路由守卫 实现前端发版后通知用户更新得一个方案
  • 过去 vs 现在:创业门槛的颠覆性变化
  • 系统架构师2025年论文《论软件架构评估2》
  • 什么是CN2专线?全面解析中国电信的高性能网络服务
  • 中国头部云服务商分析
  • SQL问题分析与诊断(8)——分析方法3
  • 【Deepseek学习大模型推理】MOONCAKE: A KVCache-centric Architecture实验部分(下)
  • 前端如何获取样式图里面的标准颜色RGB
  • 11.AOP开发