Redis缓存穿透怎么解决

如果我理解的有不对的地方,希望大家可以踊跃评论指出不对的地方,感谢!

讲一下我个人对redis缓存穿透的理解,其实感觉这个主题不应该直接叫Redis的缓存穿透,应该叫缓存穿透,只不过现在世面上用redis的比较多,我就叫这个名字了哈。

我理解的这个东东就是用户请求缓存没有查到数据,然后就去数据库查询,仍然没有查到数据,比如有1万个用户都来查询,都是先访问缓存,再访问数据库,这样对数据库会造成压力,所以叫缓存穿透,直接穿到了存储层!

那么怎么解决这个问题呢?

  1. 比较简单粗暴,如果查询存储层没有查到数据,在缓存中放置一个空的key,这样虽然阻止了缓存穿透,但是请求比较多的话,放置在缓存里的key也是比较占用空间的;
    还有一个问题就是,在key失效的前一段时间数据在存储层又存在了,但是这时候用户查到的数据还是空,这段时间就发生了数据不一致的问题,这样对于要求数据强一致性的业务就不太可靠了。

  2. 还有一个比较高大上的解决方案就是布隆过滤器(redis4.0开始支持):

    我的理解是大家可以把它理解为一个集合,就是一种数据结构也是可以存放数据的,只不过它存放的都是0和1,初始化一个布隆过滤器,里面存放的都是0,它会把你保存的数据,通过m个hash函数找到指定的位置,将m个位置的0都置为1,下次你来查询的时候,如果通过m个hash函数获得m个1,则表示这个数据可能存在,不保证100%存在,如果返回的m个数字当中有一个0,则表示该数据不存在;

我觉得布隆过滤器就是一个bitmap,但是我在网上看到大家都是把bitmap和布隆过滤器分开的,希望有大神可以解疑!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值