使用的技术栈有bitmap
bitmap也叫位图,也就是用一个bit位来表示一个东西的状态,我们都知道bit位是二进制,所以只有两种状态,0和1。
为什么要使用bitmap?
mysql单表里超过2000万条数据,查询效率会明显降低直线下降。bitmap的出现就是为了大数据量而来的,但是前提是统计的这个大数据量每个的状态只能有两种,因为每一个bit位只能表示两种状态。节省存储空间。
bitmap命令
技术细节
我们的签到服务正常只需要保存两种状态[签到、未签到],比如0表示未登录,1表示登录。 bitmap有个setbit命令:setbit key 偏移量[用户ID] 值[0|1]
我们这个签到服务还保存了用户连续签到的天数。 用户签到之前先判断用户今天是否签到过,如果没有签到,就进行签到,然后更新连续签到的天数。 设置连续签到的过期时间[后天的0:0:0] 使用了redisTemplate的expireAt(key,固定的时间点)过期方式。 过期的时间应该是在后天的0点0分0秒,我使用了JDK8中的新日期API: LocalDateTime.now().plusDays(2).withHour(0).withMinute(0).withSecond(0); 还有个功能是:判断某天有多少个用户进行了签到。可以使用bitcount获取一段时间内用户签到了多少次。