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) 0
127.0.0.1:6379> setbit test 16 1
(integer) 0
127.0.0.1:6379> bitcount test 0 0
(integer) 1
127.0.0.1:6379> bitcount test 1 1
(integer) 0
127.0.0.1:6379> bitcount test 2 2
(integer) 1


  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值