首页/数据/Redis 进阶速查/RDB 会保存 LFU/LRU 元数据
持久化56 条

RDB 会保存 LFU/LRU 元数据

开启 maxmemory 淘汰后,RDB 会记录每个键的空闲时间/频率信息,重启加载后近似恢复,但精度有限:长时间停机后热度信息会失真。

Redis 进阶速查数据更新于 2026-10-13

热度元数据会一起落盘

开启内存淘汰后,RDB 会顺带保存每个键的空闲时间(LRU 口径)或访问频率(LFU 口径)元数据,加载后据此近似恢复热度状态,让重启之后的淘汰判断不至于完全失忆。但精度有限:它记录的是快照那一刻的状态,而且 LRU 时钟精度并不高,停机时间越长热度信息越陈旧。

基本信息

依赖条件需配置 maxmemory 与淘汰策略才会实际使用
保存内容LRU 空闲时间、LFU 频率计数器
恢复方式加载时读取并初始化键的计数器
查看命令OBJECT IDLETIME 与 OBJECT FREQ
主要局限精度有限,停机越久数据越陈旧

典型使用场景

  • 重启后热点键的保留表现与预期不符,需要判断是否与热度元数据老化有关
  • 评估重启对缓存命中率的短期影响,为容量预留做准备
  • 排查重启后集中淘汰:确认是数据增长还是热度判断失准
  • LFU 策略下核对某个键的访问频率是否符合业务预期
  • 设计重启与扩容流程时,把热度重建期纳入容量与性能评估

查看热度信息

查看热度信息
redis-cli CONFIG GET maxmemory-policy            # 确认是否启用了淘汰策略
redis-cli OBJECT IDLETIME mykey                 # 该键未被访问的秒数
redis-cli OBJECT FREQ mykey                     # 仅 LFU 策略下可用
redis-cli INFO keyspace                         # 结合键数量观察重启后的变化

策略与可用命令

淘汰策略保存的元数据可用命令
allkeys-lru 等 LRU 系键的空闲时间OBJECT IDLETIME
allkeys-lfu 等 LFU 系访问频率计数器OBJECT FREQ
volatile 系同上,仅对有 TTL 的键生效按策略选用对应命令
noeviction不依赖热度元数据命令仍可执行,但与淘汰无关
OBJECT IDLETIME 记录的是「未被访问的秒数」而不是最后访问时间戳,把它当时间戳解读会得出错误结论。
重启加载后热度信息被恢复成快照时的状态,重启过程中停止的访问时长不会被计入,因此命中率通常需要一段时间才回到稳态。

易错点

  • 在非 LFU 策略下执行 OBJECT FREQ 会直接报错,排查前先确认当前淘汰策略
  • 把 OBJECT IDLETIME 当最后一次访问时间,用它做业务判定的依据不成立
  • 重启后大量键被集中淘汰时只查数据量增长,忽略热度元数据陈旧这一原因
  • 用热度元数据做跨重启的精确冷热判断,精度不足会导致误淘汰仍在使用的键

数据来源与参考

  • Redis 官方文档:OBJECT IDLETIME / OBJECT FREQ 命令
  • Redis 官方文档:淘汰策略说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌