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)

相关推荐
MC皮蛋侠客5 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
渣渣盟9 小时前
当 Redis 写入成为性能瓶颈时,如何利用 异步批量 Sink 将吞吐量从 1w QPS 提升到 10w+?
数据库·redis·php
元界metalite9 小时前
MyBatis多数据源常见难题-事务开始了为何数据源还没选出来
后端·mybatis
MC皮蛋侠客11 小时前
Redis 系列(六):过期、内存淘汰与内存优化——让 Redis 活得更久
数据库·redis·bootstrap
MC皮蛋侠客13 小时前
Redis 系列(七):事务、Pipeline 与 Lua 脚本——从原子性到 Functions
数据库·redis·lua
MC皮蛋侠客13 小时前
Redis 系列(八):缓存设计模式与一致性——从 Cache Aside 到防雪崩
redis·缓存·设计模式
渣渣盟14 小时前
当 Redis 写入不再是瓶颈后,Flink 任务的反压可能来自哪里?如何系统性地定位和解决 Flink 反压问题?
数据库·redis·flink
仍然.14 小时前
服务端高并发分布式结构演进之路
大数据·数据库·redis
MC皮蛋侠客14 小时前
Redis 系列(三):底层实现(一)——对象系统、SDS 与 dict
数据库·redis·缓存
渣渣盟15 小时前
当 Redis 集群发生主从切换(Failover)时,Flink 任务会崩溃吗?如何利用 Sentinel 实现高可用?
redis·flink·sentinel