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

热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的请求分散到不同集群节点上。

作者:京东零售 曹志飞

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

Redis 7.2.0 发布,影响最深远的版本 中国程序员拒写赌博程序被拔 14 颗牙,全身损伤达 88% Flutter 3.13 发布 System Initiative 宣布将其所有软件全部开源 字节首个大模型独立 App 亮相,Grace 更名“豆包” Spring 6.1 已兼容虚拟线程和 JDK 21 Linux 平板电脑 StarLite 5:默认搭载 Ubuntu、12.5 英寸 Chrome 116 正式发布 红帽重新部署桌面 Linux 开发,主要开发者被调离 Kubernetes 1.28 正式发布
{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/4090830/blog/10100272