#目前通行系统项目中有一个新需求【通过对通行记录数据定时分析,查询出长时间没 有刷卡/刷脸通行的学生】
#一看到通行签到相关,就想到了redis的位图,理由也有很多帖子说明了,最大优点占用空间小。
一.redis命令行
SETBIT:设置指定偏移量上的位值。语法:SETBIT <key> <offset> <value>
使用中key可以为 xxx前缀 + :+ 用户编号 + :+ yyyyMM 的格式,设置该人员在该月的签到情况。
当执行以下语句获得一个字符时
假如为2024年10月2号,则执行setbit sign:001:202410 1 1 。偏移量为 1 。
获取当前key的值为 @
使用 字符串二进制转换 得知,二进制为 0100000 ,八位数字,第二位为 1 ,代表2号签到过。
GETBIT:获取指定偏移量上的位值。语法:
GETBIT <key> <offset>
BITCOUNT:统计指定键的位中设置为1的位数。语法:
BITCOUNT <key>
BITPOS:找到第一个设置为1的位。语法:
BITPOS <key> <offset>
也可以使用get / set 直接对整个位图进行设置。
二.代码实现
1.设置指定key的位图
在项目中,使用中key可以为 xxx前缀 + :+ 用户编号 + :+ yyyyMM 的格式,设