【Redis】持久化机制

发布时间:2026/5/31 4:47:29

【Redis】持久化机制 目录一、如何在 Redis 里持久化数据的1. RDBRedis DataBase—— 内存的全量快照2. AOFAppend Only File—— 命令的流水账日志3. 两者混合使用二、如何确认开启持久化1. 配置文件2. 状态验证与文件位置查看① 验证 AOF 是否成功开启② 验证混合持久化Mixed Persistence是否开启③ 查找持久化文件的最终保存路径3. 其它进阶修改① 灵活自定义 RDB 配置② 重启 Redis 服务令配置生效一、如何在 Redis 里持久化数据的MySQL 追求安全数据必须写进硬盘。硬盘哪怕断电磁介质或闪存颗粒上的数据也不会消失。但代价是慢。Redis 追求速度数据全部塞进内存。CPU 读写内存的速度比硬盘快了成百上千倍。但代价是“断电即失”。为了兼顾“内存的速度”和“硬盘的安全”Redis 引入了持久化机制。它的核心逻辑是在内存中飞速读写在后台悄悄把数据同步到硬盘。当 Redis 触发持久化时它会对整个内存数据进行操作。只要持久化在运行你写入的任何数据都会被存入硬盘。Redis 持久化的两种不同的方案1. RDBRedis DataBase—— 内存的全量快照RDB 的本质就是定时全量备份。它是怎么工作的Redis 会根据你设定的时间周期或者使用默认周期在后台开启一个子进程。这个子进程会把当前内存里的所有数据变成一个二进制的压缩文件默认叫dump.rdb。默认配置的致命盲区你刚装好 Redis 时RDB 是默认开启的。它的规矩写在/etc/redis.conf配置文件里save 900 115 分钟内至少 1 个 key 改变就触发备份。save 300 105 分钟内至少 10 个 key 改变就触发备份。save 60 100001 分钟内至少 10000 个 key 改变就触发备份。为什么要重新配置它默认规矩太宽松了假设你的虚拟机在 4 分钟内只被修改了 5 个 Key它不会触发任何备份。如果此时突然停电这 4 分钟内写入的所有数据彻底蒸发。深度优缺点分析优势 文件体积小恢复速度快得惊人。重启时Redis 直接把dump.rdb读进内存就完事了。劣势 丢数据概率高。两次快照之间的时间段就是无保护的“裸奔期”。2. AOFAppend Only File—— 命令的流水账日志AOF 的本质就是增量命令审计。它是怎么工作的它是个极其勤快的秘书。它不关心内存里最终剩下了什么它只记录你做过什么动作。你每敲一个写命令比如SET、HSET、LPUSHRedis 就会把这行命令转换成特定的文本格式追加Append到硬盘的一个日志文件默认叫appendonly.aof的末尾。默认状态默认是关闭的appendonly no。在真实生产环境中我们必须手动把它改成appendonly yes。核心配置三大刷盘策略开启 AOF 后我们还要在配置文件里修改appendfsync参数决定秘书多久把积攒的命令真正写进硬盘always极度安全每执行一条命令立刻强制写硬盘。系统慢如蜗牛硬盘寿命暴降。no极度不安全执行完命令先放内存缓存里什么时候写硬盘听 Linux 操作系统的。everysec黄金行业标准每秒钟雷打不动写一次硬盘。哪怕断电我们也只会丢失最近 1 秒钟内的数据。深度优缺点分析超强优势 极其安全配合everysec策略几乎做到了天衣无缝。致命劣势文件巨大。你把一个数字自增了 10 万次AOF 会老老实实记 10 万行INCR账本。恢复极慢。重启时Redis 必须把 AOF 日志里的所有命令从头到尾在内存里重演一遍。3. 两者混合使用RDB 快照在指定时间间隔内如 15 分钟至少 1 个 key 变化将内存中的全部数据以二进制压缩文件dump.rdb保存到磁盘。恢复时直接加载文件速度极快。缺点是如果两次快照之间发生宕机未达到触发条件的新数据哪怕已经改了多个 key 但时间间隔未到就会永久丢失。AOF 日志记录每个写命令如SET、HSET追加到日志文件appendonly.aof重启时逐条执行命令重建数据。可通过appendfsync配置数据安全性如everysec最多丢一秒数据。缺点是日志文件体积大、恢复速度慢尤其写命令多时。两者弊端RDB 可能丢较多数据AOF 恢复慢且文件大。因此生产环境通常两者同时开启并结合 Redis 4.0 引入的混合持久化来互补。混合持久化是怎么做的从 Redis 4.0 开始当同时开启 RDB 和 AOF 并启用aof-use-rdb-preamble默认 yes时AOF 重写BGREWRITEAOF产生的文件不是纯 AOF 格式而是RDB 快照 增量 AOF 命令文件结构AOF 文件开头是一份完整的 RDB 二进制快照存储当前内存状态快照之后是新写入的增量命令以 AOF 文本格式追加。写入过程AOF 重写时Redis 会先 fork 子进程生成内存快照写入 RDB 部分然后继续将重写期间的新命令记录到缓冲区最后将缓冲区内容追加到 AOF 文件末尾作为 AOF 部分。恢复过程Redis 重启时先读取 AOF 文件开头的 RDB 部分瞬间恢复快照时的全部数据然后再执行后续的 AOF 命令这些命令很少因此重放极快。结果就是既有 RDB 的快速恢复又有 AOF 的高安全性最多丢一秒数据。混合持久化的优势AOF 文件比纯 AOF 小得多RDB 部分压缩存储恢复速度接近纯 RDB数据安全性接近纯 AOF最多丢一秒。这也是目前生产环境最推荐的持久化方案。二、如何确认开启持久化在知道了 Redis 有这两种持久化的方式之后就得知道怎么开启和配置它们了。1. 配置文件如果现在你在 Linux 中输入ps -ef | grep redis命令时看到的是redis-server *:6379后面什么都没有那就说明现在没有配置文件如果输出类似/user/bin/……redis.conf那么这就是配置文件的路径直接进去改参数就行。既然没有就可以在网上下载或者自己手动配置。这里做手动配置的情况。创建正规的配置目录与数据目录sudomkdir-p/etc/redis# 存放配置文件sudomkdir-p/var/lib/redis# 存放持久化数据dump.rdb 和 appendonly.aof手动创建并编辑 redis.conf 文件sudovi/etc/redis/redis.conf进入空白界面后按下键盘上的i键进入编辑模式看到左下角出现-- INSERT --然后把下面这段企业标准配置复制粘贴或照着敲进去# 基础运行配置 # 1. 允许 Redis 在后台默默运行不霸占你的终端窗口daemonizeyes# 2. 绑定 IP允许所有网络连接方便以后用外部工具连接bind0.0.0.0# 3. 关闭保护模式配合上面的 bind 使用protected-mode no# 4. 给你的 Redis 设定访问密码requirepass123456# 持久化核心配置 # 5. 指定数据和持久化文件的存放目录专属储物间dir/var/lib/redis# 6. 开启安全的 AOF 持久化并设定黄金刷盘策略每秒记一次日记appendonlyyesappendfsync everysec# 7. 开启混合持久化大招结合 RDB 的快与 AOF 的安全aof-use-rdb-preambleyes检查无误后按下Esc键输入:wq回车保存并退出。杀死正在裸奔的旧 Redissudopkillredis-server带着崭新的配置文件启动sudoredis-server /etc/redis/redis.conf2. 状态验证与文件位置查看修改完配置文件并重启后我们如何验证持久化是否真正生效这些文件又存放在哪里请按以下步骤逐一排查。① 验证 AOF 是否成功开启连入redis-cli后执行以下命令CONFIG GET appendonly如何判断如果返回yes说明 AOF 持久化已成功开启。② 验证混合持久化Mixed Persistence是否开启在redis-cli中输入以下命令查看混合持久化开关CONFIG GET aof-use-rdb-preamble如何判断如果返回yes说明混合持久化大招已经就位。当后续触发 AOF 重写时文件就会自动转换为“RDB 二进制开头 AOF 文本结尾”的混合格式。③ 查找持久化文件的最终保存路径想要知道 AOF 和 RDB 文件在硬盘的哪个文件夹可以分两步走获取 Redis 数据基础根目录在redis-cli中输入CONFIG GETdirRedis 会返回一个绝对路径例如/var/lib/redis或/root这就是持久化数据的“大本营”。2.定位 AOF 专属子目录Redis 7.0 及以上版本特性在 Redis 7.0 版本中官方引入了多文件 AOF 机制AOF 文件不再直接堆在根目录下而是存放在一个名为appendonlydir的子目录中。你可以使用以下命令查看该目录的名字CONFIG GET appenddir通常默认返回appendonlydir。 最终文件绝对路径总结RDB 快照文件直接存放在根目录下即/var/lib/redis/dump.rdb。AOF 文件夹存放在根目录的子目录下路径为/var/lib/redis/appendonlydir/。进入该文件夹后你会看到以.manifest、.base.rdb、.incr.aof结尾的一组文件。3. 其它进阶修改① 灵活自定义 RDB 配置除了 AOF你还可以根据业务的并发量在配置文件中自定义 RDB 的快照频率。其格式为save 秒数 修改次数自定义策略示例save 1200 100这行配置意味着“在 1200 秒20 分钟内如果至少有 100 个 Key 被修改就自动触发一次 RDB 快照”。彻底禁用 RDB 自动保存如果你只想用 AOF不希望 Redis 自动拍 RDB 快照可以在配置文件中加入save 手动强制触发 RDB 快照无需等待定时规则你可以在redis-cli中随时手动输入以下命令让 Redis 在后台立刻进行一次全量快照BGSAVE② 重启 Redis 服务令配置生效请务必记住任何配置文件的修改都必须重启 Redis 服务才能生效。在 CentOS 7 / Ubuntu 系统中通常使用以下命令如果使用 systemd 管理服务推荐sudosystemctl restart redis# 注部分系统服务名叫 redis-server命令为sudo systemctl restart redis-server如果是手动带路径启动的redis-cli-a你的密码shutdownredis-server /etc/redis/redis.conf

相关新闻