springboo单机多线程高并发防止重复消费的redis方案

springboo单机多线程高并发防止重复消费的redis方案

仅提供方案与测试。

想法:第一次收到userCode时,检查是否在redis中有,如果有,就表明已经消费了,返回抢单失败;否则,就去消费,顺便写入redis缓存中。

1、单独做redis锁,测试(失败案例)

java 复制代码
	public static int countNum = 0;
    public static int countFailNum = 0;
    @Anonymous
    @GetMapping("/testRedis")
    public AjaxResult testRedis(String userCode){
        String key = "sign:"+userCode;
        if (redisCache.hasKey(key)){
            ++countFailNum;
            System.out.println("抢单成功,人数是"+countNum+"  | 抢单失败的人数是"+countFailNum);
            return AjaxResult.error("抢单失败");
        }
        redisCache.setCacheObject(key,userCode,10, TimeUnit.MINUTES);
        ++countNum;
        System.out.println("抢单成功,人数是"+countNum+"  | 抢单失败的人数是"+countFailNum);
        return AjaxResult.success("抢单成功,人数是"+countNum);
    }


很明显,单纯的redis,根本扛不住基础的并发请求

2、线程锁+redis锁,测试(正确方案)

给方法加线程锁 关键字:synchronized

结果结果如下

相关推荐
unable code10 小时前
BUUCTF-[第二章 web进阶]SSRF Training
网络安全·web·ctf·1024程序员节
开开心心就好1 天前
进程启动瞬间暂停工具,适合调试多开
linux·运维·安全·pdf·智能音箱·智能手表·1024程序员节
仰泳之鹅2 天前
【51单片机】第一课:单片机简介与软件安装
单片机·嵌入式硬件·51单片机·1024程序员节
海海不瞌睡(捏捏王子)3 天前
C#知识点概要
java·开发语言·1024程序员节
小浣熊熊熊熊熊熊熊丶4 天前
飞牛NAS 安装 Teslamate 教程(docker版)
1024程序员节
程高兴4 天前
模糊PID控制的永磁同步电机矢量控制系统-SIMULINK
matlab·1024程序员节
海海不瞌睡(捏捏王子)4 天前
Unity知识点概要
unity·1024程序员节
unable code4 天前
[网鼎杯 2020 玄武组]SSRFMe
网络安全·web·ctf·1024程序员节
开开心心就好6 天前
安卓免费证件照制作软件,无广告弹窗
linux·运维·安全·pdf·迭代器模式·依赖倒置原则·1024程序员节
开开心心就好11 天前
轻量级PDF阅读器,仅几M大小打开秒开
linux·运维·服务器·安全·pdf·1024程序员节·oneflow