引言
在各个项目中,我们都可能需要用到签到和 统计功能。签到后会给用户一些礼品以此来吸引用户持续在该平台进行活跃。
签到功能,我们可以通过Redis中的 BitMap功能来实现
一、Redis BitMap 基本用法
BitMap 基本语法、指令
签到功能我们可以使用MySQL来完成,比如下表:
用户一次签到,就是一条记录,假如有1000万用户,平均每人每年签到次数为10次,则这张表一年的数据量为 1亿条
每签到一次需要使用(8 + 8 + 1 + 1 + 3 + 1)共22 字节的内存,一个月则最多需要600多字节
❝这样的坏处,占用内存太大了,极大的消耗内存空间!
❞
我们可以根据 Redis中 提供的 BitMap 位图功能来实现,每次签到与未签到用0 或1 来标识 ,一次存31个数字,只用了2字节 这样我们就用极小的空间实现了签到功能
BitMap 的操作指令:
-
SETBIT:向指定位置(offset)存入一个0或1
-
GETBIT:获取指定位置(offset)的bit值
-
BITCOUNT:统计BitMap中值为1的bit位的数量
-
BITFIELD:操作(查询、修改、自增)BitMap中bit数组中的指定位置(offset)的值
-
BITFIELD_RO:获取BitMap中bit数组,并以十进制形式返回
-
BITOP:将多个BitMap的结果做位运算(与 、或、异或)
-
BITPOS:查找bit数组中指定范围内第一个0或1出现的位置
使用 BitMap 完成功能实现
服务器Redis版本采用 6.2
进入redis查询 SETBIT 命令
新增key 进行存储
查询 GETBIT命令