用redis实现签到功能
功能分析:
针对签到来说,我们可以用0表示未签到,1表示已签到,为了空间上的优化,我们可以用一个bit位来表示某个用户一天是否签到。一个月31天,也就需要31个bit位,这样一个用户一个月最多也就用四个字节(一个字节8位) ,极大的节省了空间。而这个命令可以通过redis中的setbit实现。
以下为java代码实现
@Override
public Result sign() {
//1 获取当前登录用户
Long userId = UserHolder.getUser().getId();
//2 获取日期
LocalDateTime now = LocalDateTime.now();
//3 拼接key
String KeySuffix=now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
String key=RedisConstants.USER_SIGN_KEY+userId+ KeySuffix;
//4 获取今天是本月的第几天
int dayOfMonth = now.getDayOfMonth();
//5 写入redis
stringRedisTemplate.opsForValue().setBit(key,dayOfMonth-1,true);
return Result.ok();
}