什么是布隆过滤器?布隆过滤器本质上是一种数据结构,一种巧妙的概率数据结构,其特点是高效的插入和查询,可以用来告诉你“一定不能或可能”。与List、Set、Map等传统数据结构相比,它的效率更高,占用空间更小,但缺点是它返回的结果是概率性的,而不是精确的。结构特点布隆过滤器实际上是一个位数组。数组的每一位只有0和1两个值。通过对一个key进行多次不同的哈希生成多个哈希值,然后存入位数组;当判断一个key是否存在时,对该key进行多次hash,查询bit数组中是否存在多个hash值。当多个hash值的查询结果都为1时,key可能存在。注意只是[可能存在],因为可能还有其他的key映射到同一个位置,如果查询结果中有hash值为0,那么这个key[一定不存在]的优缺点当长度为bit数组太小,计算hash值存放的位置,很大概率会发生重叠,增加误判概率。位数组长度过大时,误判概率小,但可能导致内存空间占用过多,空间换时间的性价比可以通过练习redissetbit和getbitBloom来实现filter,但是当存储的值很大时,占用的内存空间会很大;例如setbitmytest10000000001>result0strlenmytest>125000000(byte)setbitmytest10000000011>result0strlenmytest>125000001(byte)setbitljtest20000000151>result0strlenmytest>250000002(byte)可以看出redis中setbitkey的长度=(maxvalue/8)+1extendedsetbitkeyoffsetvaluebitmapoffset设置如setbitmyTestKey11;意思是在偏移量为1的位置,设置值为1。例如setbitmyTestKey991;意思是在offset为99的位置,设置值为1,占用大小为99bit=12.375bytebitcountkey查询所有设置的bits值为1的offset个数bitcountkeystartend查询个数所有值为1且start8<=offset<=(end+1)8的偏移量
