bitcount key [start end]
bitcount 统计字符串被设置为1的bit数
127.0.0.1:6379> set peter a
OK
127.0.0.1:6379> bitcount peter
(integer) 3
原理是 a
的二进制为 01100001
,有三个1
,所以bitcount peter
结果得到 3
bitset key offset value
设置或者清空key的value(字符串)在offset处的bit值。
127.0.0.1:6379> set peter a
OK
127.0.0.1:6379> setbit peter 6 1
(integer) 0
127.0.0.1:6379> setbit peter 7 0
(integer) 1
127.0.0.1:6379> get peter
"b"
a
的二进制为 01100001
,setbit peter 6 1
命令的意思是把a
的二进制中的第6位设置为1
,就得到了01100011
,setbit peter 7 0
命令是把 01100011
的中的第7位设置为0
,就得到了01100010
,这时候 01100010
转化成文本也就得到 b
getbit key offset
127.0.0.1:6379> set peter a
OK
127.0.0.1:6379> getbit peter 6
(integer) 0
127.0.0.1:6379> getbit peter 7
(integer) 1
a
的二进制是 01100001
,所以offset 6和7分别是 0
与1
官网案例
假设现在我们希望记录自己网站上的用户的上线频率,比如说,计算用户 A 上线了多少天,用户 B 上线了多少天,诸如此类,以此作为数据,从而决定让哪些用户参加 beta 测试等活动 —— 这个模式可以使用 SETBIT 和 BITCOUNT 来实现。
比如说,每当用户在某一天上线的时候,我们就使用 SETBIT ,以用户名作为 key ,将那天所代表的网站的上线日作为 offset 参数,并将这个 offset 上的为设置为 1 。
举个例子,如果今天是网站上线的第 100 天,而用户 peter 在今天阅览过网站,那么执行命令 SETBIT peter 100 1 ;如果明天 peter 也继续阅览网站,那么执行命令 SETBIT peter 101 1 ,以此类推。
当要计算 peter 总共以来的上线次数时,就使用 BITCOUNT 命令:执行 BITCOUNT peter ,得出的结果就是 peter 上线的总天数。
127.0.0.1:6379> setbit peter 100 1
(integer) 0
127.0.0.1:6379> setbit peter 101 1
(integer) 0
127.0.0.1:6379> bitcount peter
(integer) 2
得到 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100
只在第100天和101天登陆过,所以只登陆了两天