一、原理介绍
#set test a
这个很好理解,把key是test的值设置为a
其中a的ascii值是97,97的二进制是1100001 [ PHP代码: echo decbin(ord('a')); ]
譬如b的ascii值是98,转成二进制是1100010。
对照下(凑满8位为一字节,因此不满前面填0,PHP可用str_pad函数进行处理)
01100001 ----- a
01100010 ----- b
从左往右数(索引从0开始),第6位和第7位不一致。因此只要a的二进制值的第6位改成1,第7位改成0就变成了b
#setbit test 6 1
#setbit test 7 0
然后get test可以看到变成了b
bitmap类型,它也是从string类型扩展出来的结构,所以它的命令也可以操作string。
#getbit key offset 获取某个偏移量的值
bitcount key [start end]。统计出bit值为1的数量
这里的start和end指的是字节(不是位)
bitpos key bit(0或1) [start] [end]
获取第一个值是0或1的bit位偏移值,start和end也是字节(不是位)
二、实战场景
这个类型不仅仅可以用来让我们改二进制改字符串值,最经典的就是用户连续签到。
key 可以设置为 前缀:用户id:年月
譬如 setbit sign:123:1909 0 1
代表用户ID=123签到,签到的时间是19年9月份,0代表该月第一天,1代表签到了
第二天没有签到,无需处理,系统默认为0
第三天签到
setbit sign:123:1909 2 1
可以查看一下目前的签到情况,显示第一天和第三天签到了,前8天目前共签到了2天
127.0.0.1:6379> setbit sign:123:1909 0 1
0
127.0.0.1:6379> setbit sign:123:1909 2 1
0
127.0.0.1:6379> getbit sign:123:1909 0
1
127.0.0.1:6379> getbit sign:123:1909 1
0
127.0.0.1:6379> getbit sign:123:1909 2
1
127.0.0.1:6379> getbit sign:123:1909 3
0
127.0.0.1:6379> bitcount sign:123:1909 0 0
2
本文分享 CSDN - SugarPPig。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。