深入redis——(1)缓存穿透问题以及解决方法

参考文章:

https://lion-wu.blog.csdn.net/article/details/108109523

https://www.jb51.net/article/163820.htm

一、什么是缓存穿透?

系统要查询的数据在缓存和数据库中都不存在,这是当业务系统发起查询,按照下面的流程,首先会前往缓存中查询,再前往数据库中查询,数据库返回空。也就是请求每次都会打到数据库上面去,这就是缓存穿透。

二、什么情况会发生缓存穿透?

如果存在大大大量请求要查询不存在的数据,那么这些请求都会打到数据库中,数据库压力剧增,可能会导致系统崩溃。所以为了避免高并发情况下缓存穿透带来的系统崩溃,我们分析一下缓存穿透的原因来一一规避:

  1. 第一次数据访问,这时缓存中还没有数据,可以提前把一些数据写入缓存来减轻压力
  2. 恶意攻击,猜测你的key命名方式,然后使用一个你缓存中不会有的key进行访问,对此可以先对key进行过滤,对不合理的key返回空值
  3. 数据库的数据也是空,缓存中肯定也没有对应的数据,这样也会导致穿透,这个对应的解决办法接下来细说!

三、解决办法

对于第三种原因,可以:

1.缓存空值

之所以发生缓存穿透,是因为缓存中没有存储这些空数据的key,导致这些请求全都打到数据库上。
那么,我们可以将数据库查询结果为空的key也存储在缓存中。当后续又出现该key的查询请求时,缓存直接返回null,而无需查询数据库。

2.布隆过滤器BloomFilter

在访问缓存前先访问布隆过滤器,如果布隆过滤器判断该数据存在,那么该数据大概率存在,如果布隆过滤器判断该数据不存在,那么该数据则一定不存在。

更详细的关于布隆过滤器是怎么过滤的,它的数据结构是什么,蚕食如何选择,这篇讲得不错👉传送门

以及布隆过滤器的实现

3.比较

对于空数据的key各不相同、key重复请求概率低的场景而言,应该布隆过滤器方案;相反的话应该选择缓存空值方案。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值