Redis Bloom Filter
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11632622.html
背景
比如刷抖音的时候,抖音会不停的推荐新的内容,而它每次推荐时候都要去重,以去掉那些我们已经看过的内容,问题是抖音是如何实现推送去重的?
Bloom Filter方案
Bloom Filter就是专门用来解决这种去重问题的。它在起到去重作用的同时,在空间上还能节省90%以上,但是稍微有点不精确,有一定的误判概率。
可以把布隆过滤器理解成一个不怎么精确的set结构,当使用它的contains方案判断某个对象是否存在时,它可能会误判。但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度也可以控制的相对足够精确,只会有小小的误判概率。
Redis官方提供的布隆过滤器到了Redis4.0提供了插件功能之后才正式登场。布隆过滤器作为一个插件加载到Redis Server中,给Redis提供了强大的布隆去重功能。
两个基本指令
bf.add
bf.exists
空间占用统计
https://krisives.github.io/bloom-calculator/
布隆过滤器的其他应用
- 爬虫系统,对URL进行去重,已经爬过的网页就可以不用再爬了,可以大幅降低去重存储消耗。
- NoSQL数据库中例如HBase,使用布隆过滤器可以显著降低数据库的IO请求量。当用户来查询某个row时,可以先通过内存中的布隆过滤器过滤掉大量不存在的row请求,然后再去磁盘进行查询。
- 邮箱系统的垃圾邮件过滤功能也普遍用到来布隆过滤器,当然也会有某些正常的邮件被放进垃圾邮件目录中,误判所致,概率比较低。
强者自救 圣者渡人