java实现bitmap签到,【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

本文分享 CSDN - SugarPPig。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值