请选择 进入手机版 | 继续访问电脑版
查看: 28|回复: 0

[面试] 通俗易懂讲布隆过滤器

[复制链接]

[面试] 通俗易懂讲布隆过滤器[复制链接]

zygxsq 发表于 2020-6-16 03:19:55 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式 回复:  0 浏览:  28
如何在海量数据中判断一个元素是否存在,布隆过滤器,你值得拥有!

大家看下这幅图,用户可能进行了一次条件错误的查询,这时候 redis 是不存在的,按照常规流程就是去数据库找了,可是这是一次错误的条件查询,数据库当然也不会存在,也不会往 redis 里面写值,返回给用户一个空,这样的操作一次两次还好,可是次数多了还了得,我放 redis 本来就是为了挡一挡,减轻数据库的压力,现在 redis 变成了形同虚设,每次还是去数据库查找了,这个就叫做缓存穿透,相当于 redis 不存在了,被击穿了,对于这种情况很好解决,我们可以在 redis 缓存一个空字符串或者特殊字符串,比如 &&,下次我们去 redis 中查询的时候,当取到的值是空或者 &&,我们就知道这个值在数据库中是没有的,就不会在去数据库中查询。

031955p2zx2kyhpqpa2a7x.png
ps:这里缓存不存在 key 的时候一定要设置过期时间,不然当数据库已经新增了这一条记录的时候,这样会导致缓存和数据库不一致的情况。

上面这个是重复查询同一个不存在的值的情况,如果应用每次查询的不存在的值是不一样的呢?即使你每次都缓存特殊字符串也没用,因为它的值不一样,比如我们的数据库用户 id 是 111,112,113,114 依次递增,但是别人要攻击你,故意拿 - 100,-936,-545 这种乱七八糟的 key 来查询,这时候 redis 和数据库这种值都是不存在的,人家每次拿的 key 也不一样,你就算缓存了也没用,这时候数据库的压力是相当大,比上面这种情况可怕的多,怎么办呢,这时候我们今天的主角 布隆过滤器 就登场了

具体细节请戳链接查看:https://www.cnblogs.com/jajian/articles/12749928.html
来自安卓客户端来自安卓客户端
回复

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1
QQ