您的位置:首页 > 游戏 > 游戏 > 使用Redis实现签到功能:Java示例解析

使用Redis实现签到功能:Java示例解析

2024/12/23 16:53:52 来源:https://blog.csdn.net/Takumilove/article/details/140417435  浏览:    关键词:使用Redis实现签到功能:Java示例解析

使用Redis实现签到功能:Java示例解析

在本博客中,我们将讨论一个使用Redis实现的签到功能的Java示例。该示例包括两个主要方法:sign()signCount(),分别用于用户签到和计算用户当月的签到次数。

1. 签到方法:sign()

首先,让我们看看sign()方法:

@Override
public 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();
}
2. 计算签到次数方法:signCount()

接下来是signCount()方法:

@Override
public 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(0);}Long num = result.get(0);if (num == null || num == 0) {return Result.ok(0);}// 6.循环遍历int count = 0;while (true) {if ((num & 1) == 0) {break;} else {count++;}num >>>= 1;}return Result.ok(count);
}
总结

通过以上两个方法,我们可以实现用户的签到和签到次数的计算。使用Redis的位操作,可以高效地存储和处理签到记录。这种方法不仅节省了存储空间,还提高了操作的效率,非常适合在高并发的应用场景中使用。

版权声明:

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

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