长治网站制作平台,装修设计培训学校,大数据技术与应用,简述网站开发主要步骤springboo单机多线程高并发防止重复消费的redis方案
仅提供方案与测试。 想法#xff1a;第一次收到userCode时#xff0c;检查是否在redis中有#xff0c;如果有#xff0c;就表明已经消费了#xff0c;返回抢单失败#xff1b;否则#xff0c;就去消费#xff0c;顺…springboo单机多线程高并发防止重复消费的redis方案
仅提供方案与测试。 想法第一次收到userCode时检查是否在redis中有如果有就表明已经消费了返回抢单失败否则就去消费顺便写入redis缓存中。
1、单独做redis锁测试失败案例 public static int countNum 0;public static int countFailNum 0;AnonymousGetMapping(/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 结果结果如下