DT_Stone<Redis 高手心法> 读书笔记 | P10 -数据结构- Bloom Filter 中发帖

场景:  APP 实现每次推荐给同一个用户的内容不重复,并过滤已看过的内容 

存 MYSQL? 这会导致频繁查库比较 exists 并发大时,服务器压力过大
redis 缓存? 这会浪费大量内存空间

Bloom Filter
是一种 space efficient 的概率型数据结构. 用于快速判断元素是否在集合中.而无需存储整个集合
虽然散列表也能用于判断元素是否在集合中. 但是 Bloom Filter 只需要散列表的 1/8 或 1/4 的空间复杂度就能解决同样的问题.
BloomFilter 可以插入元素, 但不能删除已有元素
位数组和哈希函数
redis的 Bloom Filter 是基于位数组(bit array) 和一个不同的哈希哈数
过程

分配一块内存空间给位数组,这些位数组长度固定,通常有用户指定,决定了过滤器的容量.每个位的初始值为 0
添加元素,采用 ...