【redis缓存】Bitmap类型实现用户签到

一、原理介绍

#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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值