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

简介: 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才表示确实重置成功了一次,直至一天三次。

相关文章
|
9月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
728 5
|
10月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
867 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
401 32
|
11月前
|
存储 NoSQL Redis
采用Redis的Bitmaps实现类似Github连续提交状态的功能。
在现实世界的应用开发中,实现类似于Github提交跟踪系统时,还可能需要考虑用户时区、闰年等日期相关的边界条件,以及辅助数据的存储和查询优化,例如对活跃用户的即时查询和统计等。不过这些都可以在Bitmaps的基础功能之上通过额外的代码逻辑来实现。
240 0
|
存储 监控 NoSQL
使用Redis实现延迟消息发送功能
使用 Redis 的密码认证功能,为实例设置密码以防止未授权访问。为消息提供适当加密,确保消息内容在网络传输过程中不被窃取或篡改。
462 16
|
机器学习/深度学习 数据采集 人机交互
springboot+redis互联网医院智能导诊系统源码,基于医疗大模型、知识图谱、人机交互方式实现
智能导诊系统基于医疗大模型、知识图谱与人机交互技术,解决患者“知症不知病”“挂错号”等问题。通过多模态交互(语音、文字、图片等)收集病情信息,结合医学知识图谱和深度推理,实现精准的科室推荐和分级诊疗引导。系统支持基于规则模板和数据模型两种开发原理:前者依赖人工设定症状-科室规则,后者通过机器学习或深度学习分析问诊数据。其特点包括快速病情收集、智能病症关联推理、最佳就医推荐、分级导流以及与院内平台联动,提升患者就诊效率和服务体验。技术架构采用 SpringBoot+Redis+MyBatis Plus+MySQL+RocketMQ,确保高效稳定运行。
902 0
|
存储 人工智能 NoSQL
SpringBoot整合Redis、ApacheSolr和SpringSession
本文介绍了如何使用SpringBoot整合Redis、ApacheSolr和SpringSession。SpringBoot以其便捷的配置方式受到开发者青睐,通过引入对应的starter依赖,可轻松实现功能整合。对于Redis,可通过配置RedisSentinel实现高可用;SpringSession则提供集群Session管理,支持多种存储方式如Redis;整合ApacheSolr时,借助Zookeeper搭建SolrCloud提高可用性。文中详细说明了各组件的配置步骤与代码示例,方便开发者快速上手。
268 11
|
NoSQL Java API
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Spring Boot 集成 Redis
本文介绍了在Spring Boot中集成Redis的方法,包括依赖导入、Redis配置及常用API的使用。通过导入`spring-boot-starter-data-redis`依赖和配置`application.yml`文件,可轻松实现Redis集成。文中详细讲解了StringRedisTemplate的使用,适用于字符串操作,并结合FastJSON将实体类转换为JSON存储。还展示了Redis的string、hash和list类型的操作示例。最后总结了Redis在缓存和高并发场景中的应用价值,并提供课程源代码下载链接。
2809 0
|
NoSQL Java Redis
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 安装
本教程介绍在 VMware 虚拟机(CentOS 7)或阿里云服务器中安装 Redis 的过程,包括安装 gcc 编译环境、下载 Redis(官网或 wget)、解压安装、修改配置文件(如 bind、daemonize、requirepass 等设置)、启动 Redis 服务及测试客户端连接。通过 set 和 get 命令验证安装是否成功。适用于初学者快速上手 Redis 部署。
471 0
|
NoSQL Java Redis
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
1077 0

热门文章

最新文章