注意 比特位是二进制只可以是 0 或 1。

Bitmaps 相关命令

  • BITCOUNT:统计(可选起始结束)数量 参数:Key Start End
  • BITFIELD:操作(查询、修改、自增)BitMap中bit数组指定位置的值
  • BITOP:将多个BitMap的结果做位运算(与、或、异或)
  • BITPOS:查找Bit数组中指定范围内第一个0或1出现的位置
  • GETBIT:获取指定位置的bit值
  • SETBIT:添加/修改元素 参数:Key 位 值

实验:实现签到

    @Test
    public void 签到() {
        LocalDateTime now = LocalDateTime.now();
        int dayOfMonth = now.getDayOfMonth();
        Boolean 签到结果 = redisTemplate.opsForValue().setBit("七月签到", dayOfMonth - 1, true);
        //Boolean 模拟昨天签到 = redisTemplate.opsForValue().setBit("七月签到", dayOfMonth - 2, true);
    }

Redis存储字符串是以字节存储,而1字节等于4比特位,今天是本月第一天,我签到就是1000,如果我仅第是6天签到显示的二进制就是00000600,也就是说第六天得占用2字节,没用的位的补0。

连续签到

原理:连续签到实现:循环(目标数与1做与运算,运算后判断是否是0,不是0,向右移1位)

    // 如果今天没有签到,结果就是0
    @Test
    public void 统计连续天数() {
        LocalDateTime now = LocalDateTime.now();
        Long 十进制结果 = (Long) redisTemplate.opsForValue()
                .bitField("七月签到", BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(now.getDayOfMonth())).valueAt(0))
                .get(0); // 获取目标数
        int count = 0; // 定义计数器
        while (true) {
            if ((十进制结果 & 1) == 0) { // 目标数与1进行与运算
                break;
            } else {
                count++; // 计数器+1
            }
            十进制结果 = 十进制结果 >>> 1; // 开始右移1位
        }
        System.out.println(count);
    }

    @Test
    public void 判断昨天有没有签到() {
        LocalDateTime now = LocalDateTime.now();
        Long 十进制结果 = (Long) redisTemplate.opsForValue()
                .bitField("七月签到", BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(now.getDayOfMonth())).valueAt(0))
                .get(0);
        int count = 0;
        十进制结果 = 十进制结果 >>> 1;

        if ((十进制结果 & 1) == 0) {
            System.out.println("昨天没有签到");
        } else {
            count++;
        }
        System.out.println(count);
    }

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。

对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。

如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理

源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源