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

作者:京东批发 曹志飞

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