这两天面试别人的时候问到了一些关于Redis的问题,不可避免的提到了缓存穿透等问题。说到缓存穿透,很多人肯定就想到了过滤器,那么有一款已经诞生了很多年的布隆过滤器就可以拿出来说一说了。
(以下内容仅表示个人理解)
布隆过滤器的本质是一个二进制向量,通过计算hash来确定下标。把数组对应的下标位置改成1。当一个数据过来的时候,经过同样的hash算法计算出下标,若下标对应是1则表示存在。
从这里应该可以看出来了,由于Hash冲突的存在,并不能保证查询到了对应的下标是1的数据一定存在,它只能够证明某个数据一定不存在或可能存在。会有一定的误判率。这个误判率可以通过调整数据进行几次hash运算来调整。hash计算的次数越多。向量长度越大,误判率也就越低。可以根据实际的情况和允许的误判率来设置。这边也可以看出一个时间复杂度了,需要进行hash运算越多,时间复杂度就越大。O(1)~O(N) N为Hash算法的个数。所以如果误判率设置的越低,效率也就越差。
简单聊聊布隆过滤器
最新推荐文章于 2024-11-03 16:01:49 发布