redis 实现连续签到



1.案例分析

互联网应用中都会有签到功能,吸引更多的用户,保持产品活跃度

如何判断用户连续签到7天

签到 1 天送 10 积分,连续签到 2 天送 20 积分,3 天送 30 积分,4 天以上均送 50 积分

如何显示用户某个月的连续签到次数和总签到次数

可以使用 redis 利用 BitMap 位图来存储签到数据,节省空间


2.操作

GETBIT <key> <offset> <value>

3.案例

  1. 指定时间内,判断多少人签到连续签到成功
// SETBIT 日期  用户ID  value

SETBIT 20211015 10 1
SETBIT 20211016 10 1
SETBIT 20211017 10 1
SETBIT 20211018 10 1

SETBIT 20211015 20 1
SETBIT 20211016 20 0
SETBIT 20211017 20 1
SETBIT 20211018 20 1

SETBIT 20211015 30 1
SETBIT 20211016 30 1
SETBIT 20211017 30 1
SETBIT 20211018 30 1

SETBIT 20211015 40 1
SETBIT 20211016 40 0
SETBIT 20211017 40 0
SETBIT 20211018 40 1

BITOP AND destmap 20211015 20211016 20211017 20211018

BITCOUNT destmap
2

  1. 查询用户是否连续签到

    如设置用户10月份签到数据

// SETBIT  用户ID+月份  日期  value

SETBIT  Sign:2094592473:202110  0       1
SETBIT  Sign:2094592473:202110  7       1
SETBIT  Sign:2094592473:202110  8       1
SETBIT  Sign:2094592473:202110  9       0
SETBIT  Sign:2094592473:202110  10      1
SETBIT  Sign:2094592473:202110  11      1
SETBIT  Sign:2094592473:202110  12      1
SETBIT  Sign:2094592473:202110  13      0
SETBIT  Sign:2094592473:202110  14      1
SETBIT  Sign:2094592473:202110  15      1
SETBIT  Sign:2094592473:202110  16      1
SETBIT  Sign:2094592473:202110  17      1
SETBIT  Sign:2094592473:202110  18      1
SETBIT  Sign:2094592473:202110  19      1
SETBIT  Sign:2094592473:202110  20      1

//  获取10月31天的签到数据
BITFIELD Sign:2094592473:202110 get u31 0 7
1) (integer) 14547968

// 转换成二进制
110111011111110000000000

// 判断是否有连续7天的1

  1. 查询用户 10月 签到总次数
BITCOUNT Sign:2094592473:202110

4.相关推荐

在线redis测试:在线 reids

其他文章:

《为什么我推荐你使用 Redis 实现用户签到系统》

《基于Redis位图实现用户签到功能》

《Redis 实战篇:巧用 Bitmap 实现亿级数据统计》

上一篇:electron-log 修改日志保存路径


下一篇:表示数值的字符串