SpringBoot集成Redis业务功能 01、限制玩家积分的每日重置次数

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: SpringBoot集成Redis业务功能 01、限制玩家积分的每日重置次数

业务背景


最近参与弹幕游戏的后台开发,其中的需求是这样的:初始玩家进入直播间默认积分是300分,参与弹幕游戏发送指令操作就会去消耗积分,若是积分为0则无法参与游戏,所以就会有重置积分的需求,不过重置积分次数不是无限的,目前商讨方案是每天在300分以下只可重置3次。


梳理下需求:一天,一个玩家,重置三次积分。


方案思路


对于限制玩家每日的重置次数方案如下:


方案一:在数据库中存储用户Id及校验次数,定时任务根据每日时间定时删除。(比较繁琐,且不优雅,不推荐)


这种方案的话,那么随着用户的增多,后期定时删除的任务也会更加繁重。

方案二:使用redis缓存,以uid生成不同的key,value初始化为0,每次重置积分后加1,超过3次进行校验提示,根据业务需要对key设置过期时间(推荐)。


那么此时就确定开发思路了:使用redis来进行实现。


实现方案


Redis实现

采用redis来实现方案.。


关于SpringBoot如何集成Redis见:SpringBoot整合篇 04、Springboot整合Redis


思路:


1、从redis中获取指定key。


2、若是没有key,说明今天的机会次数还没开始用,那么存储redis对应的value为1,设置过期时间为1天。


2、若是有key,说明今日已经用了n次,接着判断这个n是否<3,若是的话,执行积分查询动作(业务操作);若已经>=3,那么直接返回即可。


下面直接给出模板:修改其中注释的两个地方【修改1、修改2】后即可直接使用


@Override
public PlayerInfo resetIntegral(Long uid) {
    String LimitIntegralKey = "xxx" + uid; //修改1、redis存储key前缀(一般是业务名)+uid
    //首先走缓存
    Integer counts = redisCache.getCacheObject(LimitIntegralKey);
    //若是缓存没有找到(说明是新的一天了)设置缓存值
    if (ObjectUtils.isEmpty(counts)) {
        if (doResetIntegral(uid)) {
            redisCache.setCacheObject(LimitIntegralKey, 1, 1, TimeUnit.DAYS);
        }
    }else {
        //若是找到了:情况1:<=2则进行加一
        if (counts < 3) {
            if (doResetIntegral(uid)) {
                redisCache.increment(LimitIntegralKey);
            }
        }
    }
    //获取玩家信息
    return this.getPlayerInfo(uid);
}
/**
     * 真正执行重置动作,返回是否重置积分成功!
     * @param uid 玩家的id
     * @return 执行成功与否
     */
public boolean doResetIntegral(Long uid) {
    //修改2:重置积分业务
    return xx;
}


另外说明以下,重置操作只有当积分<300的时候才能够成功,我们执行重置动作成功就根据执行sql语句影响成功与否作为最后的结果:


对应的mapper的动态sql可以像我这么写
<!--   在xml中使用&lt;来替代<号  -->
<update id="resetPlayerIntegral" parameterType="long">
    update sys_player
    <trim prefix="SET" suffixOverrides=",">
        <if test="integral != null">integral = #{integral},</if>
    </trim>
    WHERE uid = #{uid} and integral &lt; #{integral}
</update>


测试


首先找一条数据其积分为<300的,来进行测试:



调用重置接口:





此时再次调用重置积分,由于积分并不是小于300,那么在redis里的并不会进行计数+1操作,只有当玩家积分确实是小于300才表示确实重置成功了一次,直至一天三次。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
0
0
0
25
分享
相关文章
|
21天前
|
Springboot使用Redis实现分布式锁
通过这些步骤和示例,您可以系统地了解如何在Spring Boot中使用Redis实现分布式锁,并在实际项目中应用。希望这些内容对您的学习和工作有所帮助。
148 83
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
199 43
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
160 14
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
84 0
springBoot集成websocket实时消息推送
本文介绍了如何在Spring Boot项目中集成WebSocket实现实时消息推送。首先,通过引入`spring-boot-starter-websocket`依赖,配置`WebSocketConfig`类来启用WebSocket支持。接着,创建`WebSocketTest`服务器类,处理连接、消息收发及错误等事件,并使用`ConcurrentHashMap`管理用户连接。最后,前端通过JavaScript建立WebSocket连接,监听消息并进行相应处理。此方案适用于需要实时通信的应用场景,如聊天室、通知系统等。
SpringBoot集成Tomcat、DispatcherServlet
通过这些配置,您可以充分利用 Spring Boot 内置的功能,快速构建和优化您的 Web 应用。
67 21
|
2月前
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
164 36
|
2月前
|
使用Spring Boot集成Nacos
通过上述步骤,Spring Boot应用可以成功集成Nacos,利用Nacos的服务发现和配置管理功能来提升微服务架构的灵活性和可维护性。通过这种集成,开发者可以更高效地管理和部署微服务。
301 17
SpringBoot集成Shiro权限+Jwt认证
本文主要描述如何快速基于SpringBoot 2.5.X版本集成Shiro+JWT框架,让大家快速实现无状态登陆和接口权限认证主体框架,具体业务细节未实现,大家按照实际项目补充。
115 11
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
599 12

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等