Redis持久化:RDB与AOF的权衡

一、引子:Redis宕机后数据去哪了? Redis是内存数据库,数据存储在内存中。那么问题来了:Redis宕机后,数据还在吗? 1.1 场景:双11大促数据丢失事故 场景:电商网站,双11大促 00:00:00 - 大促开始,流量暴增 00:00:01 - Redis缓存:10万个商品详情、50万个用户Session 00:05:00 - 服务器断电(机房故障) 00:05:01 - Redis进程被杀,内存数据全部丢失 00:10:00 - 服务器恢复,Redis重启 00:10:01 - Redis启动成功,但数据为空! 问题: 1. 所有商品详情缓存丢失 → 10万次数据库查询 2. 所有用户Session丢失 → 50万用户被强制登出 3. 缓存预热需要10分钟 → 数据库压力巨大 4. 用户体验极差 → 大量用户流失 损失: - 用户流失:50万用户 × 10% = 5万用户 - 订单损失:5万用户 × 20% = 1万单 - GMV损失:1万单 × 200元 = 200万元 核心问题:Redis是内存数据库,断电后数据丢失,需要持久化。 1.2 持久化的本质 持久化:将内存中的数据保存到磁盘,重启后可以恢复。 为什么需要持久化? 原因1:数据安全 - Redis宕机、服务器断电、进程被杀 - 内存数据丢失 - 持久化后可以恢复 原因2:快速恢复 - 没有持久化:需要从数据库重新加载(10分钟+) - 有持久化:直接加载持久化文件(1分钟) 原因3:数据备份 - 定期备份持久化文件 - 灾难恢复(机房火灾、磁盘损坏) Redis的两种持久化方式: ...

2025-11-03 · maneng

Redis持久化:RDB与AOF的权衡

一、引子:Redis宕机后数据去哪了? Redis是内存数据库,数据存储在内存中。那么问题来了:Redis宕机后,数据还在吗? 1.1 场景:双11大促数据丢失事故 场景:电商网站,双11大促 00:00:00 - 大促开始,流量暴增 00:00:01 - Redis缓存:10万个商品详情、50万个用户Session 00:05:00 - 服务器断电(机房故障) 00:05:01 - Redis进程被杀,内存数据全部丢失 00:10:00 - 服务器恢复,Redis重启 00:10:01 - Redis启动成功,但数据为空! 问题: 1. 所有商品详情缓存丢失 → 10万次数据库查询 2. 所有用户Session丢失 → 50万用户被强制登出 3. 缓存预热需要10分钟 → 数据库压力巨大 4. 用户体验极差 → 大量用户流失 损失: - 用户流失:50万用户 × 10% = 5万用户 - 订单损失:5万用户 × 20% = 1万单 - GMV损失:1万单 × 200元 = 200万元 核心问题:Redis是内存数据库,断电后数据丢失,需要持久化。 1.2 持久化的本质 持久化:将内存中的数据保存到磁盘,重启后可以恢复。 为什么需要持久化? 原因1:数据安全 - Redis宕机、服务器断电、进程被杀 - 内存数据丢失 - 持久化后可以恢复 原因2:快速恢复 - 没有持久化:需要从数据库重新加载(10分钟+) - 有持久化:直接加载持久化文件(1分钟) 原因3:数据备份 - 定期备份持久化文件 - 灾难恢复(机房火灾、磁盘损坏) Redis的两种持久化方式: ...

2025-11-03 · maneng

持久化入门:RDB快照详解

引言 前面我们学习了Redis的数据类型和过期机制,但有一个关键问题: Redis是内存数据库,服务器重启或宕机后,数据会丢失吗? 答案是:如果不配置持久化,数据会丢失。 Redis提供两种持久化方式: RDB(Redis Database):定时快照,保存某个时间点的数据副本 AOF(Append Only File):记录写命令日志,恢复时重放 今天我们先学习RDB,下一篇学习AOF。 一、RDB的本质 1.1 什么是RDB? RDB就是内存快照(Snapshot): Redis内存数据 ↓ 某个时间点 ↓ 完整复制到磁盘 ↓ 生成dump.rdb文件 类似于: 给电脑硬盘做Ghost镜像 虚拟机快照 游戏存档 特点: ✅ 全量备份:保存完整数据 ✅ 体积小:二进制压缩格式 ✅ 恢复快:直接加载到内存 ❌ 丢失风险:两次快照之间的数据会丢失 1.2 RDB文件在哪里? 查看配置: 127.0.0.1:6379> CONFIG GET dir 1) "dir" 2) "/var/lib/redis" # RDB文件目录 127.0.0.1:6379> CONFIG GET dbfilename 1) "dbfilename" 2) "dump.rdb" # RDB文件名 # 完整路径:/var/lib/redis/dump.rdb 文件示例: $ ls -lh /var/lib/redis/ -rw-r--r-- 1 redis redis 128M Jan 21 14:00 dump.rdb 1.3 RDB的工作流程 1. Redis接收到SAVE/BGSAVE命令或满足自动触发条件 ↓ 2. Fork子进程(写时复制) ↓ 3. 子进程将内存数据写入临时RDB文件 ↓ 4. 替换旧的RDB文件 ↓ 5. 完成,父进程继续处理请求 二、触发RDB的三种方式 2.1 手动触发:SAVE命令 阻塞式保存: ...

2025-01-21 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...