5.缓存穿透、缓存击穿、缓存雪崩问题及解决方案

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
坚持不懈,越努力越幸运,大家一起学习鸭~~~

3妹

2哥:3妹,这么晚了还不睡觉啊,在干嘛呢。
3妹:在学习呢,白天上班比较忙,只能在晚上的时间看会儿书了。
2哥:3妹加油,你尽早也会成为你羡慕的大牛的。
3妹:哈哈,多谢2哥。2哥,考考你,你知道redis为什么性能这么高吗?
2哥:这个不难,之前我也研究地,因为是基于内存、单线程、多路复用、特殊的数据结构等。
3妹:哇,2哥厉害,再给我讲讲呗。
2哥:行啊,不过说好,讲完就要睡觉了,熬夜对身体不好。身体是革命的本钱啊。
3妹:好的好的~

讲课

如何解决Redis缓存穿透问题?

Redis 缓存穿透指的是攻击者故意大量请求一些Redis缓存中不存在key的数据,导致请 求打到数据库上,导致数据库压力过大。

解决方案如下:

1.做好参数校验,无效的请求直接返回,只能避免一部分情况,攻击者总是可以找到一些没有覆盖的情况。

2.对缓存中找不到的key,需要去数据库查找的key,缓存到Redis中,但是可能会导致Redis中缓存大量无效的key,可以设置一个很短的过期时间,例如1分钟。

3.也可以使用布隆过滤器,将所有可能的存在的数据通过去hash值的方式存入到一个足够大的bitmap中去,处理请求时,通过在bitmap中查找,可以将不存在的数据拦截掉。

如何解决Redis缓存击穿问题?

缓存击穿主要指的是某个热点key失效,导致大量请求全部转向数据库,导致数据库压力过大。

解决方案如下 :

1.对热点key设置永不过期。

2.加互斥锁,缓存中没有热点key对应的数据时,等待100ms,由获得锁的线程去读取数据库然后设置缓存。

如何解决Redis缓存雪崩问题?

缓存雪崩主要指的是短时间内大量key失效,导致所有请求全部转向数据库,导致数据库压力过大。

解决方案如下 :

1.在给缓存设置失效时间时加一个随机值,避免集体失效。

2.双缓存机制,缓存A的失效时间为20分钟,缓存B的失效时间会比A长一些,从缓存A读取数据,缓存A中没有时,去缓存B中读取数据,并且启动一个异步线程来更新缓存A(如果已经有异步线程正在更新了,就不用重复更新了)。以及更新缓存B,以便延迟B的过期时间。

相关阅读

1.Redis概述 https://blog.csdn.net/kangbin825/article/details/127115470
2.Redis的底层数据结构 https://blog.csdn.net/kangbin825/article/details/127224138
3.Redis的过期策略和内存淘汰机制 https://blog.csdn.net/kangbin825/article/details/127239031

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值