2020-03-05 Redis位图实现签到

场景需求

适用场景如签到送积分、签到领取奖励等,大致需求如下:

签到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多个字符

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容