当前位置: 首页 > news >正文

Redis中BitMap实现签到与统计连续签到功能

服务层代码
//签到@Overridepublic Result sign() {//1.获取当前登录的用户Long userId = UserHolder.getUser().getId();//获取日期LocalDateTime now = LocalDateTime.now();//拼接keyString keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));String key = USER_SIGN_KEY + userId + keySuffix;//获取今天是本月的第几天int dayOfMonth = now.getDayOfMonth();//写入Redis SETBIT key offset 1stringRedisTemplate.opsForValue().setBit(key, dayOfMonth - 1, true);return Result.ok();}//统计连续签到@Overridepublic Result signCount() {//1.获取当前登录的用户Long userId = UserHolder.getUser().getId();//获取日期LocalDateTime now = LocalDateTime.now();//拼接keyString keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));String key = USER_SIGN_KEY + userId + keySuffix;//获取今天是本月的第几天int dayOfMonth = now.getDayOfMonth();//获取本月截止今天为止的所有签到记录,返回的是一个十进制的数字  BITFIELD sign:5:202409 GET u14 0  14为要查多少位即当月为几号  0为从1号开始查List<Long> result = stringRedisTemplate.opsForValue().bitField(key,BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0));if (result == null || result.isEmpty()){//没有任何签到结果return Result.ok(0);}Long num = result.get(0);if(num == null || num == 0){return Result.ok(0);}//循环遍历int count = 0;while(true){//让这个数据与1作与运算,得到数字的最后一个bit位   判断这个bit位是否为0if((num & 1) == 0){//如果为0,说明未签到,结束break;} else {//如果为1,说明已签到,计数器加1count++;}num >>>= 1;}return Result.ok(count);}

http://www.lryc.cn/news/454269.html

相关文章:

  • 【Spring】“请求“ 之传递 JSON 数据
  • 文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题
  • Redis-预热雪崩击穿穿透
  • jvisualvm学习
  • Gazebo环境下开源UAV与USV联合仿真平台
  • Linux进程调度和进程切换
  • 机器学习基本上就是特征工程——《特征工程训练营》
  • Android Framework AMS(01)AMS启动及相关初始化1-4
  • 基于基于微信小程序的社区订餐系统
  • [单master节点k8s部署]29.Istio流量管理(五)
  • Something for 24OI
  • 【React】事件机制
  • 华为OD的职级与薪资
  • 【HTML5】html5开篇基础(4)
  • HTTP【网络】
  • MQ延迟消息:原理、实现与应用
  • 计算机网络—大端序和小端序
  • 《OpenCV 计算机视觉》—— Harris角点检测、SIFT特征检测
  • rtmp协议转websocketflv的去队列积压
  • Elasticsearch实战应用:构建高效搜索引擎
  • Hive数仓操作(四)
  • 《C++跨平台开发:突破界限,释放无限可能》
  • 速盾:免备案服务器?
  • Electron获取nodejs和chrome版本信息
  • 【React】setState 批量更新
  • 微信小程序开发日记第二天
  • 如果您忘记了 Apple ID 和密码,按照指南可重新进入您的设备
  • Top4免费音频剪辑软件大比拼,2024年你选哪一款?
  • 基于SSM的电影院售票系统设计与实现
  • uniapp 必须掌握的细节