采用BitMap实现签到功能 实现签到接口,将当前用户当天签到信息保存到Redis中 思路分析: 我们可以把 年和月 作为BitMap的key,然后保存到一个BitMap中,每次签到就到对应的位上把数字从0 变为1,只要是1,就代表是这一天签到了,反之咋没有签到。 实现签到接口,将当前用户当天签到信息保存至Redis中 提示:因为BitMap ...
先定义个签到的 key,比如 user_sign:{user_id}:{year},这样每个用户每年都有一个独立的 Bitmap。...
BitMap的每一位代表一天的签到,1表示已签,0表示未签。 例如u:sign:1225:202101表示ID=1225的用户在2021年1月的签到记录 # 用户1月6号签到SETBIT u:sign:1225:20210151# 偏移量是从0开始,所以要把6减1# 检查1月6号是否签到GETBIT u:sign:1225:2021015# 偏移量是从0开始,所以要把6减1# 统计1月份的签...
setbit key offset value: 在3日签到的话,偏移量应该设置为2,则签到之后为 001 在4日签到的话,偏移量应该设置为3,则3日、4日签到后为0011(第3位和第4位都是1,表示这两天签到了) 在31日签到的话,偏移量应该设置为30,表示向右偏移30位 127.0.0.1:6379> setbit userx:202310 2 1 (integer) 0 127.0....
通过BITFIELD 指令获取当前月的所有签到数据 遍历进行判断是否签到,并存入 TreeMap 方便排序 总结 由于String 数据类型的最大长度是 512M,所以 String 支持的位数是 2^32 位。512M 表示字节 Byte 长度,换算成位 bit 需要乘以 8,即 512 2^10 2^10 * 8=2^32; Strings 的最大长度是 512M,还能存更大的数...
Bitmap:Bitmap是一个非常节省空间的数据结构,它通过一个bit位来表示某个元素对应的值或者状态。Redis的bitmap就是使用一个key对应一个bitmap。 签到功能的实现逻辑:利用Bitmap的每一位来表示用户在某一天是否签到,其中,位的索引代表日期,位的值(0或1)表示未签到或已签到。
GETBIT uid:sign:3000:202210 0 1. 第三步,统计该用户在 10 月份的签到次数(bit 数组中所有“1”的个数)。 BITCOUNT uid:sign:3000:202210 1. 这样,我们就知道该用户在 10 月份的签到情况了。 Bitmap 的 BITOP 命令 Bitmap 支持用 BITOP 命令对多个 Bitmap 按位做“与”“或”“异或”的操作,操作的...
如果一个系统,想要实现签到功能,相信大多数人的第一反应都是Redis或者MySQL数据库。而使用Redis的Bitmap位图,主要是对资源的利用比较小,接下来就来详解一下啦。 为什么使用位图 位图,其实就是基于位的映射。BitMap 的基本原理就是用一个bit 位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是...
利用Redis Bitmap 实现用户签到统计功能的基本思路是:每个用户对应一张位图,位图中的每一位代表某一天的签到情况。0 表示未签到,1 表示已签到。通过位图,我们可以快速统计用户的连续签到天数、总签到天数等。 实现步骤 初始化用户签到 Bitmap 首先,为每个用户创建一个对应的 Bitmap。每一位代表一天,例如第 0 位表...