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

结果结果如下

相关推荐
金融小师妹21 小时前
基于机器学习框架的上周行情复盘:非农数据与美联储政策信号的AI驱动解析
大数据·人工智能·深度学习·1024程序员节
渣渣盟1 天前
Flink分布式文件Sink实战解析
分布式·flink·scala·1024程序员节
CoderYanger1 天前
优选算法-栈:69.验证栈序列
java·开发语言·算法·leetcode·职场和发展·1024程序员节
金融小师妹3 天前
基于机器学习与深度强化学习:非农数据触发AI多因子模型预警!12月降息预期骤降的货币政策预测
大数据·人工智能·深度学习·1024程序员节
紫麦熊3 天前
react+ts+vite+tailwind+shadcn
1024程序员节
日日行不惧千万里3 天前
MediaMTX详解
1024程序员节
金融小师妹4 天前
基于LSTM-GARCH模型:三轮黄金周期特征提取与多因子定价机制解构
人工智能·深度学习·1024程序员节
自信150413057594 天前
初学者小白复盘23之——联合与枚举
c语言·1024程序员节
CoderYanger5 天前
B.双指针——3194. 最小元素和最大元素的最小平均值
java·开发语言·数据结构·算法·leetcode·职场和发展·1024程序员节
自信150413057596 天前
初学者小白复盘22之——结构体
c语言·数据结构·1024程序员节