实战篇--用户签到

该文章介绍了如何利用Redis中的BitMap数据结构来实现用户的签到功能。通过设置BitMap的位来记录用户每天的签到状态,使用LocalDateTime获取当前日期。在签到功能中,将用户ID与月份组合成键,然后设置对应日期的位为true。签到统计部分,通过bitField操作获取位字段,判断连续签到天数,计算出用户连续签到的次数。
摘要由CSDN通过智能技术生成

用户签到

BitMap

BitMap的用法

img

常用操作命令

img

签到功能

img

年月日的时间可以用LocalDateTime

    @Override
    public Result sign() {
        Long userId = UserHolder.getUser().getId();
        LocalDateTime now = LocalDateTime.now();
        String yyyyMM = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
        String key = "sign:"+userId+yyyyMM;
        int dayOfMonth = now.getDayOfMonth();
        stringRedisTemplate.opsForValue().setBit(key,dayOfMonth - 1, true);
        return Result.ok();
    }

签到统计

img

是否连续签到

@Override
    public Result signCount() {
        Long userId = UserHolder.getUser().getId();
        LocalDateTime now = LocalDateTime.now();
        String yyyyMM = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
        String key = "sign:"+userId+yyyyMM;
        int dayOfMonth = now.getDayOfMonth();
        List<Long> results = stringRedisTemplate.opsForValue().bitField(
                key,
                BitFieldSubCommands.create()
                        .get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0)
        );
        if(results == null || results.isEmpty()) {
            return Result.ok(0);
        }
        Long num = results.get(0);
        if (num == null || num == 0) {
            return Result.ok(0);
        }
        int count = 0;
        while (true) {
            if ((num & 1) == 0) {
                break;
            } else {
                count++;
            }
            num >>>= 1;
        }
        return Result.ok(count);
    }
    num >>>= 1;
        }
        return Result.ok(count);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值