何为热key问题?
在Redis中,访问频率高的key称为热点key,当某一热点key的请求到Server主机时,由于请求量特别大,导致主机资源不足,甚至宕机,影响正常的服务
热key问题产生原因
1.用户消费的数据远大于生产的数据,比如热卖商品、热点新闻、热点评论等,这些典型的读多写少的场景会产生热点问题
2.请求分片集中,超过单Server的性能极限,比如 固定名称key,哈希落入一台Server,访问量极大的情况,超过Server极限时,就会导致热点Key问题的产生
热key的危害
1.流量集中,达到物理网卡上限,影响其他key的访问。
2.请求过多,缓存分片服务被打垮,不能通过扩容解决,且不能发挥集群多分片的优势。
3.缓存击穿,可能打到DB,引起业务雪崩。
如何找到热key?
1.凭借业务经验,进行预估哪些是热key
2.客户端统计收集,本地统计或者上报
3.如果服务端有代理层,可以在代理层进行收集上报
如何解决热key问题?
1.增加分片副本,分担读流量
2.热key备份,比如key,备份为key1,key2……keyN,同样的数据N个备份,N个备份分布到不同分片,访问时可随机访问N个备份中的一个,进一步分担读流量
3.使用本地缓存,发现热key后,将热key对应数据加载到应用服务器本地缓存中,访问热key数据时,直接从本地缓存中获取,而不会请求到redis服务器。
参考资料:
http://tigcms.jd.com/details/S11dBQ5M7.html
https://help.aliyun.com/document_detail/67252.html
https://www.cnblogs.com/rjzheng/p/10874537.html