6 持久化

目录

[6 持久化](#6 持久化)

[6.1 概述](#6.1 概述)

[6.2 RDB 持久化](#6.2 RDB 持久化)

存储路径

文件名

[6.3 AOF 持久化](#6.3 AOF 持久化)

存储路径

文件名


6 持久化

6.1 概述

  1. redis高性能的原因
    所有数据都存储在了内存中
  2. 持久化
    内存数据易失性(服务重启 / 宕机会丢失全部数据),因此需要将内存数据同步到硬盘,该过程即为Redis 持久化。
  3. 持久化的方式
    Redis 支持两种持久化方案,可单独使用,也可结合使用(生产环境常结合):
  • RDB 方式
  • AOF 方式

|--------|----------------------------|----------------------------------------------------------|
| 对比维度 | RDB(默认持久化) | AOF(默认关闭) |
| 核心实现原理 | 满足触发条件,对内存 全量数据生成快照 | 每执行写命令, 增量追加命令文本 到文件 |
| 默认开启状态 | 开启(无需手动配置) | 关闭(需配置 appendonly yes 开启) |
| 数据记录形式 | 二进制快照文件(记录 某一时刻全量数据 ) | 文本命令文件(记录 所有修改操作过程 ) |
| 文件相关配置 | 路径 dir 、文件名 dbfilename | 路径 dir (与 RDB 共用)、文件名 appendfilename (默认 appendonly.aof) |
| 数据丢失风险 | 较高,丢失 最后一次快照后 的所有修改数据 | 较低,仅丢失少量(可通过策略优化) |
| 数据恢复逻辑 | 启动时 全量载入 快照文件到内存 | 启动时逐行解析命令, 重新执行还原数据 |
| 恢复速度 | 较快(二进制直接加载,1GB 约 20~30 秒) | 较慢(命令解析执行,文件越大耗时越长) |

6.2 RDB 持久化

  1. 工作方式
    通过快照(snapshotting) 实现,当满足配置的触发条件时,Redis 自动将内存全量数据(指某一时刻 Redis 内存中所有的键值对数据)生成快照,持久化到硬盘中。是 Redis 默认的持久化方式。
  2. 核心配置
    在redis.conf中配置。
  • 触发条件

    save 秒数 键更改数量

多条件为或关系。
默认配置:

save 900 1:900 秒(15 分钟)内至少 1 个键被修改,触发快照
save 300 10:300 秒(5 分钟)内至少 10 个键被修改,触发快照
save 60 10000:60 秒内至少 10000 个键被修改,触发快照

  • 文件配置
存储路径

dir:指定 RDB 快照文件的存储路径
默认配置是dir ./ ,./指的是启动redis时所在的工作目录。


比如,我在/usr/local/redis 目录下启动 Redis 时,dir ./ 这个配置里的 ./ 就会指向当前的工作目录 /usr/local/redis,所以生成的 dump.rdb 和 appendonly.aof 就会直接出现在 bin 目录下。

文件名

dbfilename:指定 RDB 快照文件的名称

  1. 数据恢复
    Redis 启动时,自动读取 RDB 快照文件,将硬盘数据全量载入(指全部载入)到内存;
  • 载入速度:
    1GB 快照文件(约 1000 万字符串键),耗时 20~30 秒(面试可提及该参考值);
    速度受数据量、数据结构、服务器性能影响。
  1. 缺点
    若 Redis异常退出(如宕机、进程被杀),会丢失最后一次快照后所有的修改数据;
    解决方案:按需组合配置快照条件,控制数据损失在可接受范围;
    若要求数据零丢失,需搭配 / 替换为 AOF 持久化。

6.3 AOF 持久化

  1. 工作方式
    每执行一条修改数据的写命令(如 set、hset、del 等),Redis 都会将该命令以文本形式追加写入到硬盘中的 AOF 文件,实现持久化。
    AOF(Append Only File,追加仅文件)持久化,默认不开启。
  2. 核心配置
    在redis.conf中配置。
  • 开启 AOF
    配置 appendonly yes(默认值为 no,需手动修改开启)
  • 文件配置
存储路径

AOF 的文件路径与 RDB 共用dir配置,由 dir 参数指定(无需额外单独配置)。

文件名

默认 appendonly.aof,可通过 appendfilename 参数修改(例:appendfilename my_redis.aof)

相关推荐
leeyi1 天前
Checkpoint 机制:Agent 怎么在断电后接着跑
redis·aigc·agent
云技纵横2 天前
一个 @Async 让循环依赖暴雷:Spring 代理的暗坑
redis
犯困蛋挞yy3 天前
用Claude快速解决Redis代码报错反复无解的问题
redis
用户3169353811839 天前
Java连接Redis
redis
小小工匠11 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
敲个大西瓜11 天前
mybatis拦截器插件实现数据库字段加解密
mybatis
taocarts_bidfans11 天前
反向海淘跨境缓存架构优化:taocarts Redis分层缓存实战技术
redis·缓存·架构·反向海淘·taocarts
武子康11 天前
Java-28 深入浅出 Spring 实现简易Ioc-04 在上节的业务下手动实现AOP
java·后端·mybatis