布隆过滤器(BloomFilter)

一. Redis的三大问题

名称 问题 解决方法
缓存穿透 查询了一个不存在的数据 布隆过滤器
缓存击穿 某个key的缓存失效 互斥锁
缓存雪崩 多个Key的缓存同时失效 失效时间+随机时间

二. 布隆过滤器的原理

底层是一个bit二进制向量或叫 bit 数组,bit 里存放的数据非0即1。
在这里插入图片描述
通过散列函数将元素映射到bit的相应位置,并将此位置置为1。如hash(元素) = 2:
在这里插入图片描述
当要查询某个元素是否存在时,先通过散列函数将元素进行映射,得到在bit的位置,再判断bit的此位置是0或1,若为0,则此元素一定不存在,若为1,则此元素不一定真的存在(是否还记得大明湖畔的经典名句:hash值相等,不一定是同一个对象;同一个对象,hash值一定相等)。

三. 布隆过滤器的缺点

  • 真假难辨
确缺点 解释 解决
误判 得到某个元素在bit的位置后,判断时发现此位置是1,但其实此元素并不存在 单独存储可能会误判的元素
错删 两个或以上的元素映射到bit的位置相同,要删除某个时,将1置为0,导致其他元素也完蛋了 Counting Bloom Filter
发布了70 篇原创文章 · 获赞 4 · 访问量 6372

猜你喜欢

转载自blog.csdn.net/qq_44837912/article/details/104425408