热 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 的申请扩散到不同集群节点上。
作者:京东批发 曹志飞
起源:京东云开发社区 转载请注明起源