布隆过滤器(Bloom Filter)
- 在Redis中,布隆过滤器由一个大型的位数组和几个不一样的 hash 函数构成。向布隆过滤器中添加 key 时,会使用多个 hash 函数对 key 进行 hash 运算得到一个索引值,然后对位数组长度进行取模运算得到一个位置,每个 hash 函数都会得到一个不同的位置,把位数组中的这几个位置都置为 1,这样就完成了 add 操作。当向布隆过滤器询问 key 是否存在时,跟前面的 add 操作一样,也是通过这些 hash 函数和取模运算,算出在位数组中的位置,并判断是否都为 1,只要有一个为 0,就说明布隆过滤器中的这个 key 不存在;如果都为 1,并不能说明这个 key 就一定存在,只是有很大的可能存在,因为这些位置为 1 可能是因为其他 key 存在导致的。布隆过滤器说某个值不存在,那它就一定不存在;说某个值存在,那它只是可能存在。
- 使用场景:
- 系统给用户推荐新闻时,可以使用布隆过滤器过滤掉用户看过的新闻。
- 用户请求数据库获取数据时,可以先通过内存中布隆过滤器 过滤掉对不存在数据的请求,从而减轻数据库的压力。
- 在项目中的多级缓存之上,可以添加一个布隆过滤器,防止用户对不存在数据的请求打到数据库上。
168万+

被折叠的 条评论
为什么被折叠?



