1. 首页 > 科技

项目中如何实现布隆过滤器 面试官

谈起“布隆过滤器”相信大家都不陌生,它也算日常面试中的常见面试题了。例如,当面试官在问到 Redis 模块的相关问题时,可能会问到缓存穿透(Redis 四大经典问题之一),而缓存穿透的经典解决方案之一,则是“布隆过滤器”。

但是,对于布隆过滤器是什么?以及布隆过滤器的实现原理?相信大部分同学都能回答个七七八八。当如果被问道:项目当中是如何实现布隆过滤器的?这个时候大部分同学就又回答不上来了,所以今天咱们就来探讨一下这个问题。

布隆过滤器实现如下图所示:

根据 key 值计算出它的存储位置,然后将此位置标识全部标识为 1(未存放数据的位置全部为 0),查询时也是查询对应的位置是否全部为 1,如果全部为 1,则说明数据是可能存在的,否则一定不存在。

也就是说,如果布隆过滤器说一个元素不在集合中,那么它一定不在这个集合中;但如果它说一个元素在集合中,则有可能是不存在的(存在误差,假阳性)。

布隆过滤器的主要使用场景有以下几个:

实现布隆过滤器的方法有很多,可以分为以下两类:

在项目开发当中,如果使用的是 Redis 4.0+ 版本,我们通常会使用 Redis 布隆过滤器插件来实现布隆过滤器,以下是具体的实现步骤。

git cloneredisbloommake # 编译redisbloom

编译正常执行完,会在根目录生成一个 redisbloom.so 文件。

重新启动 Redis 服务,并指定启动 RedisBloom 插件,具体命令如下:

创建一个布隆过滤器,并设置期望插入的元素数量和误差率,在 Redis 客户端中输入以下命令:

(4)添加元素到布隆过滤器

在 Redis 客户端中输入以下命令:

在 Redis 客户端中输入以下命令:

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载者并注明出处:https://www.jmbhsh.com/keji/34425.html

联系我们

QQ号:***

微信号:***

工作日:9:30-18:30,节假日休息