看了下bitmap的使用,在实际的工作中有使用场景吗?
语法:setbit key offset value
比如有这么个需求,统计现在全站人员的活跃度,用户的id是UUID,这个时候,咋存呢?
SETBIT uid:sign:用户UUID:年月 日 1 这样?
看了下bitmap的使用,在实际的工作中有使用场景吗?
语法:setbit key offset value
比如有这么个需求,统计现在全站人员的活跃度,用户的id是UUID,这个时候,咋存呢?
SETBIT uid:sign:用户UUID:年月 日 1 这样?
查了个例子,
统计用户每个月签到情况
在签到统计中,每个用户每天的签到用 1 个 bit 位表示,一年的签到只需要 365 个 bit 位。一个月最多只有 31 天,只需要 31 个 bit 位即可。
比如统计编号 89757 的用户在 2021 年 5 月份的打卡情况要如何进行?key 可以设计成
uid:sign:{userId}:{yyyyMM}
,月份的每一天的值 - 1 可以作为 offset(因为 offset 从 0 开始,所以offset = 日期 - 1
)。第一步,执行下面指令表示记录用户在 2021 年 5 月 16 号打卡。
SETBIT uid:sign:89757:202105 15 1
第二步,判断编号 89757 用户在 2021 年 5 月 16 号是否打卡。
GETBIT uid:sign:89757:202105 15
第三步,统计该用户在 5 月份的打卡次数,使用
BITCOUNT
指令。该指令用于统计给定的 bit 数组中,值 = 1 的 bit 位的数量。BITCOUNT uid:sign:89757:202105
这样我们就可以实现用户每个月的打卡情况了。