题图:pixabay
#
布隆过滤器(BloomFilter)是一种用来高效判断某个key是否在集合中的数据结构。
插入效率(O(len(hash func)))
查询效率(O(1))
缺点:
- 无法删除
- 不是100%准确。但是个人觉得这个是相对的
# 原理
先了解下Redis的bitmap数据结构。它是基于Redis的string类型实现的。基本含义是用一个bit位来映射某个元素的状态。但是这个状态只能是0或1,因为bit位只能表示0或1两种状态。它的优势是能大量节省内存空间。
# redis-cli
127.0.0.1:6379> setbit ali:88 0 1
(integer) 0
127.0.0.1:6379> strlen ali:88
(integer) 1
127.0.0.1:6379> setbit ali:88 1 1
(integer) 0
127.0.0.1:6379> strlen ali:88
(integer) 1
127.0.0.1:6379> setbit ali:88 9 1
(integer) 0
127.0.0.1:6379> strlen ali:88
(integer) 2
127.0.0.1:6379>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14