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

【Redis 探秘】Redis 持久化机制:RDB 与 AOF

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主

⛪️ 个人社区:个人社区
💞 个人主页:个人主页
🙉 专栏地址: ✅ Java 中级
🙉八股文专题:剑指大厂,手撕 Java 八股文

在这里插入图片描述

文章目录

      • Redis 持久化机制:RDB 与 AOF
        • 1.1 RDB(Redis Database Backup)
          • 1.1.1 工作原理
          • 1.1.2 优缺点
          • 1.1.3 配置示例
        • 1.2 AOF(Append Only File)
          • 1.2.1 工作原理
          • 1.2.2 优缺点
          • 1.2.3 配置示例
        • 1.3 RDB 和 AOF 的结合使用
          • 1.3.1 配置示例
        • 1.4.总结

Redis 持久化机制:RDB 与 AOF

Redis 提供了两种主要的持久化机制:RDB(Redis Database Backup)和 AOF(Append Only File)。这两种机制各有特点,适用于不同的场景。下面详细介绍这两种持久化机制的工作原理、优缺点以及配置方法。

1.1 RDB(Redis Database Backup)
1.1.1 工作原理
  • 快照:RDB 是通过创建数据集的时间点快照(snapshot)来实现持久化的。Redis 会定期将内存中的数据集写入到一个二进制文件(默认为 dump.rdb)中。
  • 触发条件
    • 手动触发:通过 SAVEBGSAVE 命令手动触发快照。
    • 自动触发:通过配置 save 参数,设置在特定条件下自动触发快照。例如:
      save 900 1      # 900秒内至少有1个key发生变化
      save 300 10     # 300秒内至少有10个key发生变化
      save 60 10000   # 60秒内至少有10000个key发生变化
      
1.1.2 优缺点
  • 优点

    • 恢复速度快:RDB 文件是一个紧凑的二进制文件,恢复速度较快。
    • 文件体积小:RDB 文件体积较小,适合备份和传输。
    • 配置简单:配置和管理相对简单。
  • 缺点

    • 数据丢失风险:如果 Redis 服务器在两次快照之间发生故障,可能会丢失这段时间内的数据。
    • 阻塞风险SAVE 命令会阻塞 Redis 服务器,直到快照完成。BGSAVE 命令会在后台执行,但仍然会占用一定的资源。
1.1.3 配置示例
# 开启 RDB 持久化
save 900 1
save 300 10
save 60 10000

# RDB 文件名
dbfilename dump.rdb

# RDB 文件存储路径
dir /var/lib/redis
1.2 AOF(Append Only File)
1.2.1 工作原理
  • 追加日志:AOF 通过记录服务器接收到的每个写操作命令,将这些命令以追加的方式写入到一个日志文件(默认为 appendonly.aof)中。
  • 重写机制:为了防止 AOF 文件过大,Redis 提供了重写机制(BGREWRITEAOF),将 AOF 文件中的命令进行优化和压缩,生成一个新的 AOF 文件。
  • 同步策略
    • always:每次写操作都同步到磁盘,最安全但性能最低。
    • everysec:每秒同步一次,平衡了安全性和性能。
    • no:不主动同步,依赖操作系统进行同步,性能最高但安全性最低。
1.2.2 优缺点
  • 优点

    • 数据安全性高:AOF 模式可以记录每一个写操作,即使 Redis 服务器突然宕机,也能恢复到最近的状态。
    • 灵活性高:可以通过配置不同的同步策略,平衡安全性和性能。
  • 缺点

    • 恢复速度慢:AOF 文件较大,恢复速度相对较慢。
    • 文件体积大:AOF 文件记录了所有的写操作,文件体积较大,需要定期进行重写。
    • 配置复杂:相对于 RDB,AOF 的配置和管理较为复杂。
1.2.3 配置示例
# 开启 AOF 持久化
appendonly yes

# AOF 文件名
appendfilename "appendonly.aof"

# 同步策略
appendfsync everysec

# AOF 重写条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
1.3 RDB 和 AOF 的结合使用

为了兼顾数据的安全性和恢复速度,Redis 支持同时使用 RDB 和 AOF 持久化机制。这样可以在 RDB 提供的快速恢复和 AOF 提供的数据安全性之间找到平衡。

1.3.1 配置示例
# 开启 RDB 持久化
save 900 1
save 300 10
save 60 10000

# RDB 文件名
dbfilename dump.rdb

# RDB 文件存储路径
dir /var/lib/redis

# 开启 AOF 持久化
appendonly yes

# AOF 文件名
appendfilename "appendonly.aof"

# 同步策略
appendfsync everysec

# AOF 重写条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
1.4.总结
  • RDB:通过创建数据集的时间点快照来实现持久化,恢复速度快,文件体积小,但存在数据丢失风险。
  • AOF:通过记录每个写操作命令来实现持久化,数据安全性高,但恢复速度慢,文件体积大。
  • 结合使用:同时使用 RDB 和 AOF 持久化机制,可以在数据的安全性和恢复速度之间找到平衡。

精彩专栏推荐订阅:在下方专栏👇🏻
✅ 2023年华为OD机试真题(A卷&B卷)+ 面试指导
✅ 精选100套 Java 项目案例
✅ 面试需要避开的坑(活动)
✅ 你找不到的核心代码
✅ 带你手撕 Spring
✅ Java 初阶

在这里插入图片描述


http://www.kler.cn/a/406394.html

相关文章:

  • 51c大模型~合集76
  • 微知-ib_write_bw的各种参数汇总(-d -q -s -R --run_infinitely)
  • 大数据实战——MapReduce案例实践
  • 解决vue-pdf的签章不显示问题
  • 【倍数问题——同余系】
  • Win11下载和配置VSCode(详细讲解)
  • 特征融合篇 | CARAFE:轻量级通用上采样算子,可提高目标检测性能
  • 设计模式在项目中有用过吗?怎么用的?
  • 数据结构 (3)线性表的概念及其抽象数据类型定义
  • go项目中比较好的实践方案
  • 【qt版本概述】
  • js前端加密方案库Crypto-js之aes的使用
  • 速通前端篇 —— CSS
  • c++中操作数据库的常用函数
  • 前端vue调试样式方法
  • 前端 px、rpx、em、rem、vh、vw计量单位的区别
  • 【D3.js in Action 3 精译_040】4.4 D3 弧形图的绘制方法
  • 准备阶段 Statistics界面性能分析
  • uniapp H5上传图片前压缩
  • vue的class绑定,后边的类会覆盖前边类样式吗
  • 3-22 ElementPlus:表单
  • vue3 在哪些方便做了性能提升?
  • 【不墨迹系列】快速入门 XML 语言
  • SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
  • STL-stack栈:P1981 [NOIP2013 普及组] 表达式求值
  • Cannal实现MySQL主从同步环境搭建