【Redis】Redis的应用场景

news2025/3/11 6:34:54

       📝个人主页:五敷有你      

 🔥系列专栏:Redis

⛺️稳中求进,晒太阳

Redis的应用场景:

 限流

要求10s内只能访问一次
 @RequestMapping("xian")
    public String xianLiu(String sign){

        String sign1 = redisTemplate.opsForValue().get("sign");
        if(!StringUtils.isBlank(sign1)){
            return "我不可以访问";
        }

        redisTemplate.opsForValue().set("sign",sign,10, TimeUnit.SECONDS);
        return "我可以访问";

    }

10s内只能访问5次
    @RequestMapping("/access")
    public String access(String id){

        Long increase= redisTemplate.opsForValue().increment(id);
        redisTemplate.expire(id,10,TimeUnit.SECONDS);

        if(increase>5){
            return "我不可以访问,10s内访问次数"+increase;
        }

        return "我可以访问"+increase;

    }

抢红包

要求
  1.   所有人抢到金额之和等于红包金额,不能少于10元。
  2. 每个人至少抢到1快钱。
  3. 保证所有人抢到金额的几率相等
实现思路:

给每个红包一个保底1元,让后将剩下的钱进行随机分配

        如果restTime<0,表示红包过期

        如果redis返回null 表示抢完了,返回已抢完

注意:红包过期时间。

  @RequestMapping("/sendRedBags")
    public String sendRedBags(Integer uid,Integer money,Integer bags){

        Random random = new Random();

        Integer[] redBags=new Integer[bags];
        Arrays.fill(redBags,1);
        int restMoney= money-bags;
        for(int i=0;i<bags-1;i++){
            int bound= restMoney+1;
            //最少1元
            int mon= random.nextInt(bound);
            redBags[i]+=mon;
            restMoney=restMoney-mon;
            if(restMoney<=0){
                break;
            }
        }
        redBags[bags-1]+=restMoney;
        System.out.println("uid"+uid+"发送红包: "+Arrays.toString(redBags));

        String key="redBags:"+uid;
        for (int i = 0; i < bags; i++) {
            redisTemplate.opsForList().leftPush(key,redBags[i].toString());
        }
        redisTemplate.expire(key,20,TimeUnit.SECONDS);
        return "ok";
    }

 @RequestMapping("/getRedBags")
    public String getRedBags(Integer uid){

        String key="redBags:"+uid;
        Long restTime = redisTemplate.getExpire(key,TimeUnit.SECONDS);
        System.out.println("红包剩余时间: "+restTime);
        if(restTime<=0){
            return "红包过期了";
        }
        String redBags = redisTemplate.opsForList().leftPop(key);
        if(StringUtils.isBlank(redBags)){
            return "红包抢光了";
        }
        System.out.println("你抢到的金额: "+redBags);
        return "你抢到的金额: "+redBags;


    }
运行结果: 

看似没有问题,但在redBags中没有东西后,key也就没了,如下:

当第6次获取红包,就会返回-2,表示没有这个key了,可明明还有时间啊,是value为nil了,key也就没了??

验证:

经过验证,确实如果list结构中的value没了之后,key也没了。不用等到过期。

所以上面判断时间的代码好像就没意义了,修改,简单点!

@RequestMapping("/getRedBags")
    public String getRedBags(Integer uid){

        String key="redBags:"+uid;


        String redBags = redisTemplate.opsForList().leftPop(key);
        if(StringUtils.isBlank(redBags)){
            return "红包过期了或被抢光了";
        }
        System.out.println("你抢到的金额: "+redBags);
        return "你抢到的金额: "+redBags;


    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1496844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

allure怎么生成测试报告简单方法

方法一&#xff1a;import pytest pytest.main([‘-s’,‘./执行文件名.py’,‘–alluredir’,‘./result’]) 方法二&#xff1a;os.system(‘allure generate result -o report --clean’) 1、点击index.html&#xff0c;右上角选择浏览器打开 2、查看界面化测试报告

前端vue项目,引入PingFang SC字体

一,首先需要先获取PingFang SC字体,如果你有 请直接跳到第二步 链接:https://pan.baidu.com/s/1nkmV59kT_hvjK4yPJn1cJA 提取码:n0s1 二,将下载好的PingFang SC字体,放在项目的和样式一起的文件下,如下图 然后再创建一个fonts.scss文件(引入的时候注意路径是否正确)…

企业如何实现跨部门和员工之间的高效沟通协同?

在当今高度竞争和信息化的商业环境中&#xff0c;企业内部各部门和员工之间的沟通协同效率直接影响到企业的整体运营效果。那么&#xff0c;企业如何实现各部门和员工之间的高效沟通协同呢&#xff1f; 一、建立有效沟通机制与明确部门职责 要实现各部门和员工间的高效协同&…

第三方软件测试报告有效期是多久?专业软件测试报告获取

第三方软件测试报告是在软件开发过程中&#xff0c;由独立的第三方机构对软件进行全面测试和评估后发布的报告。这些第三方机构通常是与软件开发商和用户无关的专业技术机构&#xff0c;具备丰富的测试经验和专业知识。    第三方测试报告具有以下几个好处&#xff1a;   …

PolarDB for PostgreSQL-概述

阿里云数据库的概述 本篇罗列了一些知识点和结构。 日志 2. 同步复制&#xff1a;下降20% 异步复制&#xff1a;数据丢失风险&#xff0c; 部署 1.示例&#xff1a; vim polarx.toml 1.测试主库和备库数据一致性 备库是否一致性读 一个节点荡掉&#xff0c;提供服务。 GMS CN…

selenium等待机制

selenium等待机制 影响元素加载的外部因素1.计算机的性能2.服务器的性能3.浏览器的性能4.网络因素 强制等待1.强制等待2.页面加载超时机制 隐性等待显性等待1.WebDriverWait类2.WebDriverWait类提供的方法untileuntile_not显性等待的语法格式 3.expected_conditions模块方法exp…

Docker本地部署Redis容器结合内网穿透实现无公网ip远程连接

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Ub…

HarmonyOS NEXT应用开发案例——阻塞事件冒泡

介绍 本示例主要介绍在点击事件中&#xff0c;子组件enabled属性设置为false的时候&#xff0c;如何解决点击子组件模块区域会触发父组件的点击事件问题&#xff1b;以及触摸事件中当子组件触发触摸事件的时候&#xff0c;父组件如果设置触摸事件的话&#xff0c;如何解决父组…

windows下以服务的方式安装nginx

下载WinSW 下载64位即可 WinSW-x64.exe复制到nginx目录下修改为nginxservice.exe 在 nginxservice.exe 同目录中&#xff0c;新建一个空的 nginxservice.xml 文件&#xff08;名字要与nginxservice.exe 名字前缀保持一致&#xff0c;但后缀是xml&#xff09; &#xff0c; n…

【C语言】linux内核napi_gro_receive和netif_napi_add

napi_gro_receive 一、注释 // napi_gro_receive是网络设备接口的一个函数&#xff0c;它被NAPI&#xff08;New API&#xff09;网络轮询机制使用&#xff0c;用于接收和处理接收到的数据包。 // 这个函数通过通用接收分组&#xff08;GRO&#xff0c;Generic Receive Offlo…

工商全程无纸化应用与CA认证结合方案

一、引言 随着互联网技术的飞速发展&#xff0c;政务服务正逐步向数字化、网络化、智能化转型。为响应国家关于推进“互联网政务服务”的号召&#xff0c;XX工商管理局致力于实现工商企业网上注册全程无纸化&#xff0c;提升政务服务的效率与质量。本方案旨在结合陕西CA认证中…

模拟三方的模拟平台

https://hellosean1025.github.io/yapi/ https://github.com/YMFE/yapi https://github.com/fjc0k/docker-YApi

Spring面向切片编程AOP概念及相关术语(一)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

微信小程序django+python大学生勤工助学管理系统uniapp-hbuiderx

大学生勤工助学管理系统设计的目的是为用户提供企业招聘、已投简历等方面的平台。 与PC端应用程序相比&#xff0c;大学生勤工助学管理系统的设计主要面向于大学生勤工助学&#xff0c;旨在为管理员和学生、企业提供一个Android的大学生勤工助学管理系统。学生可以通过Android及…

新闻资讯|基于微信小程序的经济新闻资讯系统设计与实现(源码+数据库+文档)

新闻资讯小程序目录 目录 基于微信小程序的经济新闻资讯系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2 短视频信息管理 3、新闻信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设…

centos7 使用rpm包部署filebeat

先决条件参考 虚拟机部署elasticsearch集群-CSDN博客 下载并安装filebeat的rpm包 curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.18-x86_64.rpmrpm -vi filebeat-7.17.18-x86_64.rpm 修改配置文件 配置文件内容可以参考 Repositories…

Vue项目实战--空间论坛(1)

环境准备 安装好node.js,Vue后 添加插件 router---路由&#xff0c;多页面的应用 vuex---在多个组件之间维护同一个数据 添加依赖 bootstrap---美工 popperjs/core vue项目介绍 views-----对应vue文件&#xff0c;页面 router-----路由&#xff0c;页面&#xff0c;c…

为什么猫咪主食冻干价格相差那么大?性价比高的主食冻干分享

养猫知识的不断普及&#xff0c;让主食冻干喂养逐渐受到铲屎官的青睐。但价格仍是部分铲屎官的顾虑。像我这样的资深猫友&#xff0c;早已开始尝试主食冻干喂养。虽然价格稍高&#xff0c;但其为猫咪带来的实际好处是远超其价格的。 作为一个多猫家庭的铲屎官&#xff0c;纯主食…

HTML入门:简单了解 HTML 和浏览器

你好&#xff0c;我是云桃桃。今天来简单了解一下 HTML 以及浏览器。 HTML 是什么&#xff1f; HTML&#xff08;全称&#xff1a;Hypertext Markup Language&#xff09;是一种标记语言&#xff0c;用于创建和呈现网页的结构和内容。 它由一系列标签&#xff08;或称为元素…

java SSM二手交易网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM厂房管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…