前言
像签到这种只有两种状态(是或否)的,可以使用二值状态统计。bitmap 符合二值状态统计(0,1),且占用空间小
统计某个月份内的签到情况
这里以用户id:1,8月份为例,假设1,3,5,7,9 签到
setbit sign:1:202208 1 1
setbit sign:1:202208 3 1
setbit sign:1:202208 5 1
setbit sign:1:202208 7 1
setbit sign:1:202208 9 1
统计当前月份签到天数
# 得到签到5天
bitcount sign:1:202208
查看当前月份某天是否签到
# 3号已签到
getbit sign:202208 3
# 4号未签到
getbit sign:202208 4
统计连续签到
统计连续签到就不太适合以用户id + 月份作为key了。
这里以具体签到天数作为key,以bit位置作为用户id。
假设20220801,用户1,3,5,7,9 签到。
setbit sing:20220801 1 1
setbit sing:20220801 3 1
setbit sing:20220801 5 1
setbit sing:20220801 7 1
setbit sing:20220801 9 1
20220802,用户3,7,9 签到
setbit sing:20220802 3 1
setbit sing:20220802 7 1
setbit sing:20220802 9 1
20220803,用户5,9 签到
setbit sing:20220803 5 1
setbit sing:20220803 9 1
统计 8月1,2,3 号都登录了的用户数量
# 将三个日期的bit 按位与结果 放入 result中
bitop and result sing:20220801 sing:20220802 sing:20220803
# 统计连续签到情况
# 得到连续签到的只有一个用户
bitcount result