思路
我们把集合中的每一个值按照提供的 Hash 算法算出对应的 Hash 值,然后将 Hash 值对数组长度取模后得到需要计入数组的索引值,并且将数组这个位置的值从 0 改成 1。在判断一个元素是否存在于这个集合中时,你只需要将这个元素按照相同的算法计算出索引值,如果这个位置的值为 1 就认为这个元素在集合中,否则则认为不在集合中。
缺陷
hash碰撞导致错误几率
判断元素在集合中时,这个元素可能不在集合中
一旦布隆过滤器判断这个元素不在集合中时,它一定不在集合中
不支持删除
建议
选择多个 Hash 函数计算多个 Hash 值,这样可以减少误判的几率;
布隆过滤器会消耗一定的内存空间,所以在使用时需要评估你的业务场景下需要多大的内存,存储的成本是否可以接受。
对于极热点缓存数据穿透造成的“狗桩效应”,可以通过设置分布式锁或者后台线程定时加载的方式来解决。