签到功能设计

一、为什么要做签到功能

培养用户使用习惯,签到功能设置的目的在于吸引用户每天去完成签到动作,培养用户使用习惯。

增加用户活跃度,对于企业来说,用户养成长期的签到习惯,使得用户活跃度更强,刺激沉默用户,使得其在活跃过程中驻足产品。促进活跃用户更加活跃,产生正向反馈。

提高企业一定的收入,签到后用户获取的奖励,一定程度上能提高企业的收入,优惠券或积分的形式可以促使用户下单,提高订单量。

二、数据表设计

签到最核心的包含两个要素:

• 谁签到:用户id

• 什么时候签的:签到日期

同时需要再考虑一些功能要素,比如:

• 补签功能,所以要有补签标示

• 按照年、月统计的功能:所以签到日期可以按照年、月、日分离保存

最后表结构设计如下

         签到表

字段名说明
id主键
user_id用户id
year签到年份
month签到月份
date签到日期
is_backup是否补签
 Bitmap

这种设计会有些浪费空间如果每天活跃的用户很多,那么占用的存储空间会很大

如果要节省存储空间,我们可以使用Bitmap,它会像下图这样

它把每个bit位对应当月的每一天,形成映射关系,用0和1分别标识是否打卡,这种思路称为bitmap(位图)而我们的Redis中恰好提供了bitmap的数据结构(属于是字符串的一种,在String下的一类)和相关指令操作,我们可以直接使用。

在Redis中,bitmap底层还是基于String类型实现的,存储数据是以二进制(bit位)为单位进行存储的,bitmap在处理大量数据统计和判断时,可以只占用非常小的一部分内存,并且计算速度非常高效

 三、流程图

四、功能需求

查询签到:

在签到日历中,我们可以把用户本月第一天到今天为止签到过的日期高亮显示。

因此我们必须把签到记录返回,具体来说就是每一天是否签到的数据。是否签到,就是0或1,刚好在前端0和1代表false和true,也就是签到或没签到。

因此,每一天的签到结果就是一个0或1的数字,我们最终返回的结果可以是一个0或1组成的数组,对应从本月第1天到今天为止每一天的签到情况。

新增签到:

在个人中心的页面,用户每天都可以签到一次。在用户点击签到之后,后台会组装签到记录,保存到redis的bitmap

那么在后台,要做的事情就是把BitMap中的与签到日期对应的bit位设置为1,并计算连续签到天数

另外,为了便于统计,我们可以每个月为每个用户生成一个独立的KEY,因此KEY中必须包含用户信息、月份信息,类似于下图:

五、涉及问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值