面试官 名目中如何成功布隆过滤器
谈起“布隆过滤器”置信大家都不生疏,它也算日常面试中的经常出现面试题了。例如,当面试官在问到 Redis 模块的关系疑问时,或者会问到缓存穿透(Redis 四大经典疑问之一),而缓存穿透的经典处置打算之一,则是“布隆过滤器”。
然而,关于布隆过滤器是什么?以及布隆过滤器的成功原理?置信大局部同窗都能回答个七七八八。当假设被问道:名目当中是如何成功布隆过滤器的?这个时刻大局部同窗就又回答不过去了,所以当天我们就来讨论一下这个疑问。
布隆过滤器成功如下图所示:
依据 key 值计算出它的存储位置,而后将此位置标识所有标识为 1(未寄存数据的位置所有为 0),查问时也是查问对应的位置能否所有为 1,假设所有为 1,则说明数据是或者存在的,否则必定不存在。
也就是说,假设布隆过滤器说一个元素不在汇合中,那么它必定不在这个汇合中;但假设它说一个元素在汇合中,则有或者是不存在的(存在误差,假阳性)。
布隆过滤器的重要经常使用场景有以下几个:
成功布隆过滤器的方法有很多,可以分为以下两类:
在名目开发当中,假设经常使用的是 Redis 4.0+ 版本,我们通常会经常使用 Redis 布隆过滤器插件来成功布隆过滤器,以下是详细的成功步骤。
git cloneredisbloommake # 编译redisbloom
编译反常口头完,会在根目录生成一个 redisbloom.so 文件。
从新启动 Redis 服务,并指定启动 RedisBloom 插件,详细命令如下:
创立一个布隆过滤器,并设置希冀拔出的元素数量和误差率,在 Redis 客户端中输入以下命令:
(4)参与元素到布隆过滤器
在 Redis 客户端中输入以下命令:
在 Redis 客户端中输入以下命令: