欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 黑马点评10——用户签到-BitMap数据结构

黑马点评10——用户签到-BitMap数据结构

2025/5/16 0:12:24 来源:https://blog.csdn.net/shall_zhao/article/details/141968909  浏览:    关键词:黑马点评10——用户签到-BitMap数据结构

文章目录

  • BitMap用法
  • 签到功能
  • 签到统计

BitMap用法

其实数据库完全可以实现签到功能
在这里插入图片描述
但签到数据比较大,借鉴签到卡的思想
在这里插入图片描述
布隆过滤器也是使用BitMap实现的.
在这里插入图片描述

签到功能

在这里插入图片描述
因为是当前用户的当天,所以保存需要的年月日不需要参数,可以直接获取。
在这里插入图片描述

 @Overridepublic Result sign() {// 1. 获取当前登录用户Long userId = UserHolder.getUser().getId();// 2. 获取日期LocalDateTime now = LocalDateTime.now();// 3. 拼接KeyString keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));String key = USER_SIGN_KEY + userId + keySuffix;// 4. 获取今天是本月的第几天int dayOfMonth = now.getDayOfMonth();// 5. 写入redis SETBIT key offset 1stringRedisTemplate.opsForValue().setBit(key, dayOfMonth - 1, true);return Result.ok();}

签到统计

在这里插入图片描述
在这里插入图片描述

    @Overridepublic Result signCount() {// 1. 获取当前登录用户Long userId = UserHolder.getUser().getId();// 2. 获取日期LocalDateTime now = LocalDateTime.now();// 3. 拼接KeyString keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));String key = USER_SIGN_KEY + userId + keySuffix;// 4. 获取今天是本月的第几天int dayOfMonth = now.getDayOfMonth();// 5. 获取本月截至今天为止所有的签到记录, 返回一个十进制数字List<Long> result = stringRedisTemplate.opsForValue().bitField(key,BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0));if(result == null || result.isEmpty()){return Result.ok();}Long num = result.get(0);if(num == null || num == 0){return Result.ok();}// 6. 循环遍历,统计1的个数int count = 0;while(num != 0){if((num & 1) == 1){count++;}else{break; // 因为是连续签到,缺勤的就结束统计}num >>>= 1;}return Result.ok(count);}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词