当前位置: 代码网 > it编程>数据库>Redis > Redis 缓存使用的热点Key问题的解决

Redis 缓存使用的热点Key问题的解决

2025年05月26日 Redis 我要评论
1. redis热点key的原因与危害热点 key(hot key)是指在 redis 中被高频访问的某个或某几个 key,导致请求集中在一个 redis 实例或分片上,引发以下问题:cpu 负载过高

1. redis热点key的原因与危害

热点 key(hot key) 是指在 redis 中被高频访问的某个或某几个 key,导致请求集中在一个 redis 实例或分片上,引发以下问题:

  • cpu 负载过高:单实例 qps 暴增,甚至打满 cpu。
  • 网络带宽瓶颈:大量请求集中在某个节点,导致网络拥堵。
  • 缓存击穿:热点 key 过期时,大量请求直接穿透到数据库,可能引发雪崩。
  • 数据不一致:主从复制延迟下,读从节点可能获取旧数据。

2. 如何发现热点 key?

(1) 监控工具

  • redis 自带命令:

    redis-cli --hotkeys
    • 全量扫描,对性能有影响,生产环境慎用
    • 显示每个热点 key 及其访问频次(基于 lfu(历史总访问频次) 计数器)。
    monitor
    • 适用场景:临时抓取瞬时热点(如大促期间)。
    • 风险:执行期间 redis 吞吐量下降 50%+,严禁长期使用!
 redis-cli --hotkeys              # 4.0+ 版本支持(需设置 maxmemory-policy 为 lfu)
 redis-cli monitor | head -n 100  # 实时观察高频 key(仅调试用)
  • 客户端拦截:
    编辑代码拦截redis客户端工具,比如使用aop方式,统计key的访问次数,对统计数据进行收集分析,如使用 prometheus/elk

  • 第三方工具:

    • redis-faina(基于 monitor 的分析工具)。
    • prometheus + grafana 监控 qps 突增的 key。

(2) 业务预估

  • 提前识别可能的热点(如活动页的推荐商品)。

3. 解决方案

(1) 本地缓存(防穿透)

  • 方案:在应用层(如 jvm)使用 caffeine 或 guava cache 缓存热点 key。
  • 优点:减少 redis 访问压力。
  • 注意:需设置合理的过期时间,避免脏数据。

(2) key 分片(分散压力)

  • 方案:将热点 key 拆分为多个子 key,如:
    item:1001 -> item:1001:1, item:1001:2, ..., item:1001:10
    
  • 访问时:通过哈希或轮询选择子 key。
  • 适用场景:读多写少的热点(如统计类数据)。

(3) 读写分离

  • 方案:使用 redis 集群的从节点(replica)分担读请求。
  • 缺点:主从同步有延迟,适合对一致性要求不高的场景。

(4) 限流 & 熔断

  • 方案:
    • 用 redis + lua 实现令牌桶限流。
    • 熔断工具:hystrix、sentinel。
  • 适用场景:突发流量(如秒杀)。

4. 总结

方案适用场景优缺点
本地缓存读多写少,允许短暂不一致简单高效,但需控制缓存时间
key 分片可水平拆分的统计类数据分散压力,但增加代码复杂度
多级缓存高并发系统(如电商详情页)架构复杂,适合长期优化
限流熔断突发流量(秒杀、大促)牺牲部分请求,保系统整体稳定

整体解决思路就是:

  • 监控发现:通过 redis-cli --hotkeys 或 prometheus 定位热点 key;
  • 减少穿透:用本地缓存 + 永不过期策略;
  • 分散压力:分片存储或读写分离;
  • 兜底措施:限流熔断避免雪崩。

根据业务特点灵活组合方案,才能有效解决热点 key 问题!

到此这篇关于redis 缓存使用的热点key问题的解决的文章就介绍到这了,更多相关redis缓存热点key内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com