127.0.0.1:8001> bf.insert bloom_filter_test2 items key1 key2 key3 1) (integer) 1 2) (integer) 1 3) (integer) 1 127.0.0.1:8001> bf.insert bloom_filter_test2 items key1 key2 key3 1) (integer) 0 2) (integer) 0 3) (integer) 0 127.0.0.1:8001> bf.insert bloom_filter_test2 capacity 10000 error 0.00001 nocreate items key1 key2 key3 1) (integer) 0 2) (integer) 0 3) (integer) 0 127.0.0.1:8001> 127.0.0.1:8001> bf.insert bloom_filter_test2 capacity 10000 error 0.00001 nocreate items key4 key5 key6 1) (integer) 1 2) (integer) 1 3) (integer) 1 127.0.0.1:8001>
bf持久化操作
BF.SCANDUMP {key} {iter}
对bloom过滤器进行增量保存。这对于不能适应常规save和restore模型的大型bloom filter非常有用。
第一次调用这个命令时,iter的值应该是0。这个命令将返回连续的(iter, data)对,直到(0,NULL),以表示完成
Python伪代码演示:
chunks = [] iter = 0 while True: iter, data = BF.SCANDUMP(key, iter) if iter == 0: break else: chunks.append([iter, data]) # Load it back for chunk in chunks: iter, data = chunk BF.LOADCHUNK(key, iter, data)
bf.scandump示例127.0.0.1:8001> bf.scandump bloom_filter_test2 0 1) (integer) 1 2) "\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00{\x14\xaeG\xe1z\x84?\x88\x16\x8a\xc5\x8c+#@\a\x00\x00\x00j\x00\x00\x00\n" 127.0.0.1:8001> bf.scandump bloom_filter_test2 1 1) (integer) 129 2) "\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x00B\x01\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00 \x00\x00\b\x00\x00\x00\x00\b\x00\x00@\x00\x01\x04\x18\x02\x00\x00\x00\x82\x00\x00\x80@\x00\b\x00\x00\x00\x00 \x00\x00@\x00\x00\x00\x00\x18\b\x00\b\x00\b\x00\x80B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00 (\x00\x00\x00\x00@\x00\x00\x00\x00@\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\b" 127.0.0.1:8001> bf.scandump bloom_filter_test2 129 1) (integer) 0 2) "" 127.0.0.1:8001>
blool filter数据类型的属性
bf.debug
这里可以看到,随着bloom filter元素的增加,其空间容量也在不断地增加
127.0.0.1:8001> bf.debug bloom_filter_test 1) "size:5" 2) "bytes:4194304 bits:33554432 hashes:24 hashwidth:64 capacity:1000200 size:5 ratio:1e-07" 127.0.0.1:8001> 127.0.0.1:8001> 127.0.0.1:8001> bf.debug bloom_filter_test 1) "size:128955" 2) "bytes:4194304 bits:33554432 hashes:24 hashwidth:64 capacity:1000200 size:128955 ratio:1e-07" 127.0.0.1:8001> 127.0.0.1:8001> 127.0.0.1:8001> bf.debug bloom_filter_test 1) "size:380507" 2) "bytes:4194304 bits:33554432 hashes:24 hashwidth:64 capacity:1000200 size:380507 ratio:1e-07" 127.0.0.1:8001> 127.0.0.1:8001> 127.0.0.1:8001> bf.debug bloom_filter_test 1) "size:569166" 2) "bytes:4194304 bits:33554432 hashes:24 hashwidth:64 capacity:1000200 size:569166 ratio:1e-07" 127.0.0.1:8001> 127.0.0.1:8001> 127.0.0.1:8001> bf.debug bloom_filter_test 1) "size:852316" 2) "bytes:4194304 bits:33554432 hashes:24 hashwidth:64 capacity:1000200 size:852316 ratio:1e-07" 127.0.0.1:8001> 127.0.0.1:8001> 127.0.0.1:8001> bf.debug bloom_filter_test 1) "size:1000005" 2) "bytes:4194304 bits:33554432 hashes:24 hashwidth:64 capacity:1000200 size:1000005 ratio:1e-07" 127.0.0.1:8001>
关于布隆过滤器数据类型的空间分析
redis的bigkeys选项可以分析整个实例中的big keys信息,但是无法分析出MBbloom--类型的key值得大小
这里基于Redis的debug object功能,实现对MBbloom--类型的key的统计(没有找到怎么用Python执行bf.debug原生命令的执行方式)。