Skip to content

Redis 持久化与内存淘汰:宕机丢多少数据?

知识背景

Redis 数据主要在内存,宕机或重启后是否可恢复取决于 持久化策略RDB 快照与 AOF 追加日志是两种主路径;同时 maxmemory淘汰策略 决定内存打满时删哪些 key。后端选型要回答:能丢多久数据、恢复要多快、内存上限多少


知识详解与通俗解释

1. RDB(快照)

在某一时刻把内存数据 fork 子进程 写到磁盘(二进制紧凑)。

  • 优点:恢复快、文件小。
  • 缺点:两次快照之间的写入可能丢失fork 在数据量大时对 CPU/内存 有瞬时压力。

通俗说:定期拍一张全班合影;两次拍照之间新来的同学可能没进相册。

2. AOF(Append Only File)

把每条写命令追加到日志;重启时 重放 恢复。

  • appendfsync always:最安全,性能差。
  • everysec:每秒刷盘,折中常用
  • no:交给 OS,快但可能丢更多。

AOF 可 重写 压缩体积。

3. 混合持久化(Redis 4+)

RDB 打底 + AOF 增量,兼顾恢复速度与数据安全,生产常见配置方向之一。

4. 内存淘汰策略(maxmemory-policy)

内存到 maxmemory 时,例如:

  • volatile-lru:从设了过期时间的 key 里 LRU 淘汰。
  • allkeys-lru:所有 key 里 LRU。
  • volatile-ttl:优先淘汰即将过期的。
  • noeviction:不淘汰,写命令报错(缓存场景要谨慎)。

通俗说:房子满了要么扔旧东西(淘汰),要么拒绝再买(noeviction)。


总结

  • RDB 像快照,AOF 像账本;混合可兼顾。
  • 接受多少数据丢失 = 持久化频率 + fsync 策略 的权衡。
  • 淘汰策略与业务 key 是否设 TTL 强相关,上线前要显式配置,避免默认不符合预期。