Yihui’s Blog

什么是热key?

日期:2026-09-27
标签:#面试 #场景设计 #Redis
难度:中等
来源:牛面场景题
答案说明:独立整理(站内题目标记为 VIP,未读取会员答案)

一句话答案

热 key 是访问或处理成本集中在少数键上,使其所在 Redis 节点的 CPU、网络或回源负载失衡;它不一定是大 key。

面试口语版(约 60 秒)

例如首页展示一个热门活动,所有用户都读取同一个活动键;即使值很小,单键请求量也可能让其所在分片先达到瓶颈。排查时看应用侧按键维度的访问分布、Redis 节点 CPU 与网络、命令延迟,并结合可用的热键采样工具,确认是读热还是写热。读多写少可以在应用侧加短时本地缓存、分层缓存,或在一致性允许时用副本分担读;但本地缓存会扩大失效窗口,副本也有复制延迟。写热点不能简单复制一个计数键解决,需要考虑分片计数、批量聚合或重设计写入路径,同时保证聚合精度和去重要求。热点键失效时,还要防止它演变成缓存击穿。

诊断与例子

假设 event:home:summary 的值只有几百字节,但所有首页请求都读取它,节点 CPU 和网络持续升高,这属于热 key 而不是大 key。先看读写比例:

类型可选治理主要代价
读热点本地短缓存、请求合并、允许时读副本陈旧数据、节点间失效同步、复制延迟
写热点分片计数、异步聚合、降低写频聚合延迟、精确性和幂等复杂度
热点过期提前刷新、同键重建合并后台刷新和兜底逻辑

Redis 8.6 起有 HOTKEYS 跟踪命令;在其他版本或部署环境可结合应用侧采样。redis-cli --hotkeys 依赖 LFU 类型的 maxmemory-policy,不能假设所有实例都可直接使用。高流量实例上使用 MONITOR 可能影响性能,应谨慎。

取舍与易错点

  • 热 key 由访问集中程度决定,具体阈值要看实例容量、命令类型和值大小。
  • 给读热点拆成多个副本键会增加更新与一致性成本,且并非所有客户端都能均匀路由。
  • 只看平均延迟可能漏掉单分片过载,需看节点差异、尾延迟和每键请求量。
  • 缓存命中很高仍可能有热 key,因为压力就在缓存层。

面试官递进追问

  1. 热 key 和大 key 的区别是什么?
  2. 本地缓存缓解读热时,更新如何通知各实例?
  3. 写热点使用分片计数后,如何兼顾实时展示与精确结算?

自测

  • 不看笔记,60 秒用小而热的键说明问题和读写分治。
  • 针对热点失效、某单分片 CPU 升高,列出排查顺序与观测指标。

参考资料

资料核对日期:2026-09-27。

Maintained by · YihuiEdit on GitHub

Keep reading

View all posts

如何为Redis分布式锁设置合理的超时时间?

日期:2026-09-27 标签:#面试 #场景设计 #Redis 难度:中等 来源:牛面场景题 答案说明:独立整理(站内题目标记为 VIP,未读取会员答案) 一句话答案 租约应覆盖可预期的执行、暂停与网络抖动,同时限制故障后的等待;没有可靠耗时上界时用有身份校验的受控续期,并在业务资源侧防止旧执行者写入。 面试…

Read article

怎么用Redis实现可重入的分布式锁?

日期:2026-09-27 标签:#面试 #场景设计 #Redis 难度:中等 来源:牛面场景题 答案说明:独立整理(站内题目标记为 VIP,未读取会员答案) 一句话答案 为同一把锁保存“本次最外层获锁的唯一令牌 + 重入次数 + 租约”;嵌套调用共享该令牌并原子递增,释放时递减,次数归零才删除。新一轮独立获锁必…

Read article

基于 Redis 实现分布式锁有什么优缺点?

日期:2026-09-27 标签:#面试 #场景设计 #Redis 难度:简单 来源:牛面场景题 答案说明:独立整理(站内题目标记为 VIP,未读取会员答案) 一句话答案 Redis 锁接入简单、响应快,适合容忍少量故障窗口内重复执行的任务;租约过期与主从切换可能破坏互斥,关键写入还须在资源侧拒绝旧持有者。 面试…

Read article