面试题-redis布隆过滤器

一、布隆过滤器原理

布隆过滤器是一种空间效率非常高的随机数据结构,用于快速检测一个元素是否在集合中。它基于哈希函数和位数组实现。

其原理主要包括以下三个步骤:

1.初始化:布隆过滤器由一个长度为 m 的位数组和 k 个哈希函数组成。位数组的每个元素都被初始化为 0。

2.插入元素:当一个元素被插入时,会使用 k 个哈希函数将元素映射到位数组的 k 个不同位置上,并将这些位置的值都设为 1。

3.检查元素:当需要判断一个元素是否存在于集合中时,将元素映射到位数组的 k 个位置上。若这些位置的值都为 1,则说明元素可能存在于该集合中;若其中任意一个位置的值为 0,则说明元素一定不存在于该集合中。

由于每个元素都会对位数组中的多个位置进行标记,因此布隆过滤器通常具有非常高的空间效率。同时,其检查元素的速度也非常快,但会存在一定的误判率。因此在使用布隆过滤器时,需要根据具体的应用场景和误判率需求来确定哈希函数的数量和位数组的长度。

布隆过滤器: 在 不一定存在, 不在, 一定不存在

二、布隆过滤器使用

1、redis bitmap类型 创建布隆过滤器

2、google guava布隆过滤器

三、布隆过滤器不能删除的几种解决方案

1、定时异步重建布隆过滤器。比如说我们每过 4 个小时在额外的一台服务器上,异步去执行一个任务调度,来重新生成布隆过滤器,替换掉已有的布隆过滤器。

2、计数布隆过滤器。在标准的布隆过滤器下,是无法得知当前某一位它是被哪些具体数据进行了引用,但是计数布隆过滤器它是在这一位上额外的附加的计数信息,表达出该位被几个数据进行了引用。

3、布谷鸟过滤器

你可能感兴趣的:(java,redis)