云原生 浅谈 Redis - 热点 key 问题 | 京东云技术团队

京东云开发者 · 2023年08月21日 · 924 次阅读

热 key 问题描述

热 key 问题就是突然有几十万的请求去访问 redis 上的某个特定 key,那么这样会造成流量过于集中,达到物理网卡上限,从而导致这台 redis 服务器直接宕机。

如何发现热点 key

  • 凭借业务经验,进行预估哪些是热 key。比如某些商品要做秒杀,则商品 key 就可以判断为热 key,但并非所有业务都能预估出热 key。

  • 在客户端进行收集。比如在 redis 客户端执行 redis 命令之前,加入一行代码进行命令数据收集,然后通过网络将收集的命令发送出去,缺点是对客户端代码有入侵。

  • 在 Proxy 层做收集,但是并非所有的 redis 集群都有 proxy。

  • 用 redis 自带命令,monitor 命令可以实时抓取出 redis 服务器接收到的命令,然后写代码统计出热 key 是啥,不过高并发条件下,有内存暴增的隐患,影响 redis 的性能。redis4.0.3 提供了客户端热点 key 发现功能,如果 key 比较多,执行比较慢。

  • 自己抓包评估,redis 客户端使用 TCP 协议与服务端进行交互,通信协议采用 RESP,自己写程序监听端口,按照 RESP 协议规则解析数据进行分析,不过开发成本较高,不易维护。

如何解决热 key

  • 增加二级缓存,发现热 key 以后,可以把热 key 数据加载到系统 JVM 并设置合适的缓存过期时间,针对热 key 的请求就会直接分散到各业务服务器上,防止所有请求同时访问同一台 redis。

  • 备份热 key。可以把热点 key 的数据备份到所有 redis 的集群节点中,可以通过在热点 key 后面拼接集群节点编号,然后将这些备份 key 分散到所有集群节点中,客户端访问热点 key 的时候也在热点 key 后面随机拼接集群节点编号,将热点 key 的请求分散到不同集群节点上。

作者:京东零售 曹志飞

来源:京东云开发社区 转载请注明来源

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册