2024-05-02  阅读(98)
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1249261372

回答

所谓“热 key” 是指短时间内被大量访问的某个 key。热 key 问题则是指某个 key 被大量访问,导致 Redis 服务压力过大,从而压垮 Redis 服务的情况。

与大 key 问题相似,解决热 key 一般分为两个步骤:

发现热 key

发现热 key 的方式有多种。

  • 提前预知。例如在做商品秒杀的时候,很容易就能判断这些参与秒杀的商品的 key 就是热 key。
  • 在客户端收集。在访问 Redis 之前,加一个统计,统计访问 key 的访问次数,若某个 key 短时间的访问量大幅度增加,那么该 key 就是热 key。
  • 使用Proxy层做收集。在应用程序和 Redis 之间再增加一次 Proxy 作为应用程序访问 Redis 的统一入口,由它来负责 key 的访问统计。
  • 使用 Redis 自带命令。Redis 4.0.3提供了redis-cli 的热点 key 发现功能,执行 redis-cli 时加上 –hotkeys 选项即可。
  • 使用开源。例如京东开源的 jd-hotkey,是一款高性能热数据探测中间件,用来实时探测出系统的热数据。

解决热 key

解决热 key 问题主要有如下几个方案:

  1. 二级缓存:在 Redis 前使用本地缓存,对于热点数据,先尝试在本地缓存中获取,如果没有命中,再回到 Redis 中去获取。
  2. 热点 key 分担:一台 Redis 顶不住,我就多搞几台,将热 key 分散到多台 Redis 服务器中,当访问热 key 的请求来了,就从这些 Redis 服务器中随机(迭代)获取即可,压力分散。
  3. 限流和降级:在应用层面,可以对热 key 的访问进行限流,合理控制流量,防止系统过载。

扩展

热 key 有什么危害

  • 影响整体性能:大量的的请求集中在少量热 key 上,导致这些 key 的访问评率非常高,增加了 Redis 节点的压力,降低了整体性能。
  • 单点故障:大量请求压垮 Redis 服务器,会导致与该热 key 相关的服务都不可用,影响整个系统的可用性。
  • 缓存击穿:压垮 Redis 服务后,请求会直接到数据库,压力进一步给到数据库,会降低整个系统的稳定性和性能。
  • 点赞