什么是位图?
-
位图使用一个比特位来存储当前数组是否存在的一个状态值
-
位图使用一个bit数组,把一个数据使用hash之后落在bit其中的一个位置,通过1对该位置进行标记,适合数据不是特别多的情况
什么是布隆过滤器?
布隆过滤器在位图的基础上进行了优化,当一个元素被加入到集合的时候,通过k个散列函数,把这个元素映射到一个位数组中的k个点。
把这些位置设置为1,在数据检索或比较的时候可以使用同样的方式去映射,去观察每一个位置的值是不是1,如果是那么很有可能存在,如果有任何一个位置为0,那么一定不存在。
布隆过滤器的特点
-
它实际上是一个很长的二进制数组(初始值为0的bit数组)+一系列随机hash算法映射函数,主要用于判断一个元素是否在集合中
-
特点:布隆过滤器占用内存少,但有一定不正确性:不存在的一定不存在,存在的不一定存在。
布隆过滤器通常用于解决Redis缓存穿透,使用luar脚本集成到redis中,而不是在service中判断