[redis]redis的热key问题

目录

前言

问题

回答

网传

总结


前言

今天被问到,redi的热key问题,怎么解决?

挺经典的,但是回答的也不好,做一个记录。

因为和面试官探讨了一下,看看他想要的答案是什么,来进行补错。

问题

瞬间有几十万的请求去访问redis上某个固定的key,从而压垮缓存服务

回答

我的想法当时是:

1. 提前缓存热key

2.多增点机器,然后把热key每台都放一下

(我甚至想到cdn 不要干啥都想到cdn,跟这个场景也没那么相关,多加思考)

面试官想听到的是:

1.利用本地缓存

2.业务进行分散热key,比如加个值 1,2,3。。

3.过滤无效请求

网传

  • 监控热key
  • 通知系统做处理
  • 利用二级缓存
    比如利用ehcache,或者一个HashMap都可以。在你发现热key以后,把热key加载到系统的JVM中。
    针对这种热key请求,会直接从jvm中取,而不会走到redis层。

    假设此时有十万个针对同一个key的请求过来,如果没有本地缓存,这十万个请求就直接怼到同一台redis上了。
    现在假设,你的应用层有50台机器,OK,你也有jvm缓存了。这十万个请求平均分散开来,每个机器有2000个请求,会从JVM中取到value值,然后返回数据。避免了十万个请求怼到同一台redis上的情形。
  • 备份热key
    这个方案也很简单。不要让key走到同一台redis上不就行了。我们把这个key,在多个redis上都存一份不就好了。接下来,有热key请求进来的时候,我们就在有备份的redis上随机选取一台,进行访问取值,返回数据。
    (这个主要也得看集群的模式)

这部分参考资料:https://www.cnblogs.com/rjzheng/p/10874537.html

总结

考虑问题要从多个角度来考虑,尽量分析全面

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值