做pc网站排/五种常用的网站推广方法
Redis 布隆过滤器
布隆过滤器是Redis 4.0版本之后的一个插件,它有几个基本命令:
-
bf.add
添加元素到布隆过滤器,类似于sadd
;如果要一次性添加多个,可以使用bf.madd
。 -
bf.exists
判断一个元素是否存在,类似于sismember
,一次只能查询一个元素;如果想一次查询多个元素,可以使用bf.mexists
命令。
在使用bf.add
命令添加元素之前,还可以使用bf.reserve
命令创建一个自定义的布隆过滤器。bf.reserve
命令有三个参数,分别是:
-
key
:键名 -
error_rate
:期望错误率,期望错误率越低,需要的空间就越大。 -
capacity
:容量,当实际元素的数量超过这个初始化容量时,误判率上升。
Redis自动创建的布隆过滤器,默认的error_rate
是 0.01,capacity
是100。
布隆过滤器的底层数据结构是bitmap
,向布隆过滤器中添加元素时,会使用多个无偏哈希函数对元素进行哈希,算出一个整数索引值,然后对位数组长度进行取模运算得到一个位置,每个无偏哈希函数都会得到一个不同的位置。再把位数组的这几个位置都设置为1,这就完成了bf.add
命令的操作。
由此可见,布隆过滤器返回true
的元素,不一定存在(具有一定误差),而对于不存在的元素,一定返回false
。
布隆过滤器有两大应用,一是解决缓存击穿问题。当有大量请求查询数据库不存在的数据时,就会给数据库带来压力,这时候用布隆过滤器过滤掉那些一定不存在与数据库的元素,缓解数据库的压力。
另一个就是去重,诸如网页爬虫去重、用户推荐内容去重等。