Redis中setbit和bitcount的注意细节

来源:转载


setbit 可以理解是一个位数组,至于这个数组有多大,redis中bit映射被限制在512MB之内,所以最大是2^32。也就是在这样一个位数组上存0或者是1 ,可以结合bloomFilter的应用场景理解位数组的用法,将字符串使用一种合适哈希函数映射到不同的bit位上(2^32足够的大,可以满足需求)

然后快速判断一个元素是否在集合之内,可以将复杂度降低到1,性能消耗主要是在对这个元素进行哈希运算。

以上是bit的一个应用场景。

下面说setbit和bitcount的区别  

可以想象一个大数组 |_0_|_1_|_2_|_3_|_4_|_5_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| 

这里的0 1 2 3 4 5 分别就是bit位 也就是setbit的第二个参数 那个偏移量  setbit test 4 1 那么就相当于是在4上值为1,其他?其他地方都是0。

这是setbit 

但是 bitcount 统计的是1的个数  bitcount test 0 -1 就是所有的  bitcount 0 0 那么就应该是第一个字节中1的数量的,

注意是字节 第一个字节也就是 0 1 2 3 4 5 6 7 这八个位置上。

所以如果 

127.0.0.1:6379> setbit test 7 1(integer) 0127.0.0.1:6379> setbit test 16 1(integer) 0127.0.0.1:6379> bitcount test 0 0(integer) 1127.0.0.1:6379> bitcount test 1 1(integer) 0127.0.0.1:6379> bitcount test 2 2(integer) 1




分享给朋友:
您可能感兴趣的文章:
随机阅读: