场景需求
适用场景如签到送积分、签到领取奖励等,大致需求如下:
签到1天送1积分,连续签到2天送2积分,3天送3积分,3天以上均送3积分等。
如果连续签到中断,则重置计数,每月初重置计数。
当月签到满3天领取奖励1,满5天领取奖励2,满7天领取奖励3……等等。
显示用户某个月的签到次数和首次签到时间。
在日历控件上展示用户每月签到情况,可以切换年月显示……等等。
设计思路
对于用户签到数据,如果每条数据都用K/V的方式存储,当用户量大的时候内存开销是非常大的。而位图(BitMap)是由一组bit位组成的,每个bit位对应0和1两个状态,虽然内部还是采用String类型存储,但Redis提供了一些指令用于直接操作位图,可以把它看作是一个bit数组,数组的下标就是偏移量。它的优点是内存开销小、效率高且操作简单,很适合用于签到这类场景
想一下如果签到365天,那就需要365条数据,如果用户量很大的系统,根本没法实现。所以我们有位图,可以大大节省空间,一个字符 = 8bit,365天的签到数据也就365bit,40多个字符