Redis缓存穿透,击穿,雪崩

1.缓存穿透

1.1缓存穿透的概念

众所周知Redis数据是放在内存里面的,MySQL里的数据是放在磁盘里的访问MySQL需要做的是IO操作,所以我们一般查询数据都是这样的一个流程首先我先查Redis,如果Redis里面有数据直接拿出来就行了,如果没有就去查MySQL同时我把查到的数据写到Redis里面。但是如果黑客写个脚本故意去查Redis没有的东西,比如说我写个死循环里面随机生成一个Redis不可能有的东西,这样就会不断的访问MySQL严重的话会给MySQL打崩。这就是缓存穿透。

1.2如何解决缓存穿透

1.首先我们可以实现对接口api的限流比如说一个接口正常一秒钟可能也就几十次,结果你一秒钟访问了成千上万次那一定是有问题的我们需要对这种接口进行限流。

2.从数据库和Redis都查询不到数据的情况下,将数据库空值写入到缓存中加上短时间的有效期。(只适合单个key,随机生成不同的key就完了)。而且这种方案也可能正常数据的使用。

3.布隆过滤器

2.缓存击穿

2.1缓存击穿的概念

假如说在高并发的情况下,当一个热点key过期的时候,因为访问该key请求过多,多个请求同时发现该缓存key过期,这时候查询数据库,同时将数据库内容都放到我们的redis中,对我们的数据库压力非常的大。

2.2如何解决缓存击穿

1.解铃还须系铃人,造成这种情况的原因是这个key快过期了,然后有多个客户端同时访问造成了这种缓存击穿。所以我们只需要减少客户端访问量并且让这个key不失效就行了。我们能想到的解决方案就是分布式锁,当多个客户端同时想访问的时候,我们不让他们同时访问,只留下一个客户端去查数据库把数据拿回来放到redis当中这样就成功地给这个热点key续命了,然后通知其他的客户端让他们过来拿数据就可以了。

2.对热点key设置无限有效期,或者异步延长时间。

3.缓存雪崩

3.1缓存雪崩的概念

缓存雪崩是指Redis服务器重启没有持久化或者大量key集中失效,突然对我们的数据库压力非常大。

3.2如何解决缓存雪崩

过期时间随机或者设置不一样的过期时间。

综上所述:

  • 穿透 key不存在情况下
  • 击穿 单个热点key失效在并发查询下的情况
  • 雪崩 多个key失效方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

温JZ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值