用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();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值