【453期】美团面试:如何识别 Redis 中热 Key?如何解决?

热Key是面试中常见的问题,产生的原因、危害及如何解决是每个中高级开发必备的技能,本文我们就热key(hot key)问题来讨论,如何合理的解决热key问题。

  • 什么是热Key?
  • 热Key产生的原因?
  • 热点Key的危害?
  • 如何识别热点Key?
  • 如何解决热Key问题?

1什么是热Key?

Redis中,我们把访问频率高的Key,称为热Key。比如突然又几十万的请求去访问redis中某个特定的Key,那么这样会造成redis服务器短时间流量过于集中,很可能导致redis的服务器宕机。

那么接下来对这个Key的请求,都会直接请求到我们的后端数据库中,数据库性能本来就不高,这样就可能直接压垮数据库,进而导致后端服务不可用。

2热Key产生的原因?

1、用户消费的数据远大于生产的数据,如商品秒杀、热点新闻、热点评论等读多写少的场景。

双十一秒杀商品,短时间内某个爆款商品可能被点击/购买上百万次,或者某条爆炸性新闻等被大量浏览,此时会造成一个较大的请求Redis量,这种情况下就会造成热点Key问题。

2、请求分片集中,超过单台Redis服务器的性能极限。

在服务端读数据进行访问时,往往会对数据进行分片切分,例如采用固定Hash分片,hash落入同一台redis服务器,如果瞬间访问量过大,超过机器瓶颈时,就会导致热点 Key 问题的产生。

3热点Key的危害?

缓存击穿,压垮redis服务器,导致大量请求直接发往后端服务,并且DB本身性能较弱,很可能进一步导致后端服务雪崩。

4如何识别热点Key?

1、凭借个人经验,结合业务场景,判断哪些是热Key。

比如,双十一大促的时候,苹果手机正在秒杀,那么我们可以判断苹果手机这个sku就是热Key。

2、使用redis之前,在客户端写程序统计上报。

修改我们的业务代码,在操作redis之前,加入Key使用次数的统计逻辑,定时把收集到的数据上报到统一的服务进行聚合计算,这样我们就可以找到那些热点Key。缺点就是对我们的业务代码有一定的侵入性。

3、服务代理层上报。

这个要看具体公司redis集群架构是怎么样的,如果是在redis前面有一个代理层,那么我们可以在代理层进行收集上报,也是可以找到热点Key。如下这种架构:

【453期】美团面试:如何识别 Redis 中热 Key?如何解决?

这种方式确定也很明显, 每个公司的架构不一样,并非都有Proxy代理这一层。

4、使用redis自带的命令。

例如monitor、redis-cli加上--hotkeys选项等,不过这种方式执行起来很慢,可能会降低redis的处理请求的性能,慎用。

monitor命令:可以实时抓取出redis服务器接收到的命令,然后写代码统计出热Key,也有现成的分析工具可以使用。

5、redis节点抓包分析。

自己写程序监听端口,解析数据,进行分析。

5如何解决热Key问题?

1、Redis集群扩容:增加分片副本,分摊客户端发过来的读请求;

2、使用二级缓存,即JVM本地缓存,减少Redis的读请求。

例如使用Caffeine+redis 实现二级缓存,先从本地缓存中取,取不到再去redis中去取。当然也可以使用其它框架,如ehcache、甚至一个HashMap都可以。

【453期】美团面试:如何识别 Redis 中热 Key?如何解决?
来源:blog.csdn.net/Weixiaohuai/
article/details/125310401
后端专属技术群

构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!

文明发言,以交流技术职位内推行业探讨为主

广告人士勿入,切勿轻信私聊,防止被骗

【453期】美团面试:如何识别 Redis 中热 Key?如何解决?

加我好友,拉你进群

原文始发于微信公众号(Java面试题精选):【453期】美团面试:如何识别 Redis 中热 Key?如何解决?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/175919.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!