Redis面试题分享五:Redis中什么是热key 问题?如何解决热key 问题?

目录

一、什么是热Key?

二、热Key产生的原因?

三、热点Key的危害?

四、如何识别热点Key?

五、如何解决热Key问题?


一、什么是热Key?

在Redis中,我们把访问频率高的Key,称为热Key

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

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

二、热Key产生的原因?

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

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

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

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

三、热点Key的危害?

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

四、如何识别热点Key?

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

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

2、服务代理层上报。

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

3、使用redis自带的命令。

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

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

4、redis节点抓包分析。

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

五、如何解决热Key问题?

热key问题是指在分布式系统中,某个关键操作或数据被频繁访问,导致该操作或数据成为系统的瓶颈。解决热key问题的方法有以下几种:

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

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

2. 分片:将热点数据进行分片,使其分散到不同的节点上进行处理。这样可以减轻单个节点的负载压力,并提高系统的并发处理能力。

3. 异步处理:对于一些耗时较长的操作,可以采用异步处理方式,将请求放入消息队列中进行处理,从而避免阻塞其他请求。

4. 负载均衡:通过负载均衡技术将请求均匀地分发到多个节点上进行处理,避免某个节点成为热点。

5. 数据库优化:对于频繁访问的数据库表或字段,可以进行索引优化、查询优化等操作,提高数据库的读写性能。

综合使用以上方法可以有效地解决热key问题,并提升系统的性能和可扩展性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之乎者也·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值