讲师中心 微信公众号
AI工具推荐 视频效率加速

为什么刚写入的高频访问Key会被Redis快速淘汰

云雪吖_5118

云雪吖_5118

发布时间:2026-09-08 08:38:25

|

913人浏览过

|

来源于php中文网

原创

allkeys-lfu对“刚写入的高频Key”无能为力,因新key初始counter=5,访问10次仅升至约10,而老key衰减后仍可能剩30+,无法快速超越;且LFU无法实时感知动态热度变化。

为什么刚写入的高频访问key会被redis快速淘汰

allkeys-lfu 为什么对“刚写入的高频Key”也无能为力

LFU 不是“一访问就高分”,而是靠衰减计数器累积热度。新 key 初始 counter = 5(Redis 6+ 默认),哪怕连续被访问 10 次,counter 也只涨到 10 左右;而一个老 key 若历史 counter 是 50,哪怕最近一周没访问,衰减后仍可能剩 30+。结果就是:新高频 key 在 LFU 排名里根本挤不掉旧冷 key。

更关键的是,MEMORY USAGE 和 OBJECT FREQ 无法同时查——你得先用 SCAN 找出疑似热 key,再逐个执行 MEMORY USAGE + OBJECT FREQ,中间还可能被并发写覆盖。所以“刚写入就高频”这个动态过程,LFU 策略本身看不到、也来不及响应。

volatile-lru / volatile-ttl 会让没设过期时间的热Key完全免疫淘汰?

不会。如果配置的是 volatile-lru 或 volatile-ttl,那所有没设 TTL 的 key(包括你刚写入的热 key)**根本不在候选池里**——它们既不会被主动淘汰,也不会参与任何淘汰计算。但问题来了:内存快满了,Redis 只能从那批“有 TTL 的 key”里删,而它们可能全是低频冷数据。结果就是 used_memory_dataset 持续 > 95% maxmemory,但热 key 安然无恙,冷 key 却反复被删又重建,加剧碎片和延迟。

常见误操作:

  • 以为“加了 TTL 就安全”,实际反而把热 key 推进淘汰队列(volatile-lru 下它比老冷 key 更容易被淘汰)
  • 用 SET key value EX 3600 写热 key,却忘了后续 EXPIRE 调整,导致 TTL 缩短成几秒,触发 volatile-ttl 优先淘汰
  • 业务层缓存逻辑混用 SET 和 SETEX,部分 key 没带 TTL,部分带了,造成淘汰范围割裂

真正该盯住的三个命令组合

别依赖 redis-cli --bigkeys,它连真实内存都算不准。定位“刚写入就被淘汰”的热 key,必须手动串联三步:

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • 用 INFO memory 确认 used_memory_dataset 是否持续 > 85% maxmemory,且 mem_fragmentation_ratio > 1.4
  • 用 INFO stats 查 evicted_keys 是否每分钟增长 > 100,再结合 keyspace_hits/keyspace_misses 判断是否缓存击穿引发雪崩式重刷
  • 用 SCAN 配合 MEMORY USAGE + OBJECT FREQ 抽样检查:比如 SCAN 0 MATCH "user:*" COUNT 100,对每个返回 key 执行 MEMORY USAGE 和 OBJECT FREQ,筛选出 MEMORY USAGE > 10000 且 OBJECT FREQ >= 5 的组合

注意:OBJECT FREQ 返回值是 0–255 的近似值,不是精确计数;MEMORY USAGE 包含 Redis 内部编码开销(如 ziplist → hashtable 升级后翻倍),这两者偏差常达 3–5 倍。

为什么监控里 evicted_keys 暴涨,但 slowlog 里找不到大 Key 操作

因为淘汰发生在内存分配前,不是命令执行时。Redis 在每次 SET/HSET 等写入前检查内存,若超限,就立刻触发淘汰流程——这个过程不记入 slowlog,也不走命令队列。你看到的 slowlog 都是“已经成功执行”的命令,而真正导致淘汰的,往往是上一秒的 LPUSH 或 INCR,它们本身很快,但累积内存压力后,下一条普通 GET 都可能触发连锁淘汰。

典型现象:

  • evicted_keys 每秒 +500,但 slowlog 最长耗时才 0.8ms
  • 业务日志显示大量 “cache miss”,而 Redis 日志里只有 Evicting key ...,没有对应的大 key 操作记录
  • INFO stats 中 expired_keys 也在同步上涨,说明过期 key 清理和内存淘汰在并发发生,互相干扰

这时候不能只看单条命令,得拉取 10 秒窗口内的 COMMANDSTATS,重点看 cmdstat_set 和 cmdstat_incr 的调用量突增点,再反向查这些 key 的 MEMORY USAGE 分布。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4309

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3815

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6932

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

623

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

736

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6582

2024.04.07

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1140

2024.04.07

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1016

2024.04.07

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn