1. 引言
在各个项目中,我们都可能需要用到签到和 统计功能。签到后会给用户一些礼品以此来吸引用户持续在该平台进行活跃。
签到功能,我们可以通过Redis中的 BitMap功能来实现
2. Redis BitMap基本用法
SETBIT
: 向指定个位置offset存入一个0或者1,setbit key offset value
GETBIT
: 获取指定位置offset的bit值,GETBIT key offset
BITCOUNT
: 统计BigMap中值为1的bit位的数量BITFIELD
: 操作(查询、修改、自增)BitMap中bit数组中的指定位置offset的值BITFIELD_RO
: 获取BitMap中bit的数组,并以十进制形式返回BITOP
: 将多个BitMap的结果做位运算(与、或、异或)BITPOS
: 查找bit数组中指定范围内第一个0或者1出现的位置
1 | # setbit key offset value |
案例工程
采用BitMap 实现签到功能, 实现签到接口,将当前用户当天签到信息保存到Redis中
**思路分析: ** 把签到日期作为BitMap中的key,然后保存到BitMap中,每次签到就到对应位上的数字由0变为1,只要是1,表示已经签到类
- 创建用户签到表
1
2
3
4
5
6
7CREATE TABLE `tb_sign` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint unsigned NOT NULL COMMENT '用户',
`sign_date` date NOT NULL COMMENT '签到日期',
`is_backup` tinyint unsigned DEFAULT NULL COMMENT '是否补签',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT;