@Resourceprivate RedisConnection<String, String> redisConnection;@Resource(name = "testPool")private ExecutorService executorService;@GetMapping(value = "/test")public void testRedis() {// 库存redisConnection.asyncRedisStringCommands().set("test-redis-incr", "1000");// 消耗成功的库存(可以替换成Java8的LongAdder)(最优:使用redis的自增)AtomicInteger successCount = new AtomicInteger();// 消耗失败的库存AtomicInteger failerCount = new AtomicInteger();// 线程记数AtomicInteger countAll = new AtomicInteger();for (int i=0; i<5; i++) {executorService.execute(() -> {for (int j=0; j<200; j++) {try {// 库存剩余Long count = redisConnection.asyncRedisStringCommands().decr("test-redis-incr").get();if (count<0) {throw new Exception();}int increment = successCount.getAndIncrement();redisConnection.asyncRedisStringCommands().set("test-redis-incr-successCount", String.valueOf(increment+1));System.out.println("j--------------:" + j + "--------------successCount-----------:" + increment);} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();} catch (Exception e) {int increment = failerCount.getAndIncrement();redisConnection.asyncRedisStringCommands().set("test-redis-incr-failerCount", String.valueOf(increment+1));System.out.println("j--------------:" + j + "--------------failerCount-----------:" + increment);}}int countAllAndIncrement = countAll.getAndIncrement();if ((countAllAndIncrement+1)==5) {System.out.println("countAllAndIncrement-----------:" + countAllAndIncrement);}});}try {String successCountRedis = redisConnection.asyncRedisStringCommands().get("test-redis-incr-successCount").get();String failerCountRedis = redisConnection.asyncRedisStringCommands().get("test-redis-incr-failerCount").get();System.out.println("successCountRedis--------------" + successCountRedis);System.out.println("failerCountRedis--------------" + failerCountRedis);} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}return;}

利用redis,模拟控制库存消耗场景相关推荐

  1. 在高并发的情况下,利用redis来处理库存超卖和遗留问题

    在高并发的情况下,利用redis来处理库存超卖和遗留问题 首先现在redis中放上商品的库存数量为100间商品,在初始化一个set集合用于放秒杀成功的用户id,本用例先放进去一个id=10000的用户 ...

  2. 风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景

    风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景,并采用快速前推法或同步回代消除法进行削减,可以对生成场景数和削减数据进行修改,下图展示的为1000个 ...

  3. 利用BAPI(BAPI_GOODSMVT_CREATE)投料消耗(261)销售订单E库存

    BAPI_GOODSMVT_CREATE进行261投料的时候需注意的事项: 1.在项目中,利用BAPI(BAPI_GOODSMVT_CREATE)投料消耗(261)销售订单E库存,ITEM表中的销售订 ...

  4. Redis相关命令及使用场景介绍

    1. Redis相关命令及使用 1.1 string 格式:(key:value) SET key value 添加一个key value 值(set 键 值) 127.0.0.1:6379> ...

  5. Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁

    List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...

  6. Redis 的 8 大应用场景

    转载自  Redis 的 8 大应用场景 之前讲过Redis的介绍,及使用Redis带来的优势,这章整理了一下Redis的应用场景,也是非常重要的,学不学得好,能正常落地是关键. 下面一一来分析下Re ...

  7. redis rua解决库存问题_如何解决高并发下的库存安全问题,没你想得那么复杂(附源码)...

    一. 问题 不知道大家该开发中有没有遇到这样的一个问题,在电影院购票或者去网上买东西的时候,比方说当年哪吒大电影出来的时候,那抢票相当火爆啊,一票难求,那购票系统的后台是如何保证观众能买到自己喜欢的票 ...

  8. redis内存理解---内存消耗

    高效利用内存首先需要理解redis内存消耗在哪里 有些内存消耗是必不可少的,有些内存是可以通过调整参数.合理使用来避免内存浪费. 内存消耗:进程自身消耗和子进程消耗. info memory used ...

  9. Redis的20种使用场景

    本文介绍Redis除了缓存以外的使用场景. 测试源码:https://github.com/vehang/ehang-spring-boot/tree/main/spring-boot-011-red ...

  10. 利用Redis一步步实现优惠券的最终秒杀方案

    订单ID不能采用自增长的原因: 1.规律变化太明显.两天下单的ID的差值,能够计算出商城的订单量: 2.如果采用自增长,订单数据是会不断产生的,到时候要分表,但是每个表的ID都是从0开始增长的,这样I ...

最新文章

  1. vant组件搜索并选择_借助PARTsolutions 选型助手,轻松快速地找到组件。
  2. Web移动应用调试工具——Weinre
  3. 深入理解java的泛型
  4. Python3 函数笔记
  5. javaWeb服务详解(含源代码,测试通过,注释) ——applicationContext-Service.xml
  6. 如何成为一个Java高薪架构师?
  7. SAP License:SAP结帐操作详细操作指南
  8. resin 配置 java_home_resin的安装与配置 - chencheng-linux的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. [微信小程序]搜索功能实现,搜索框样式
  10. 全能程序员系列(十二)--开发人员该怎么做PPT?
  11. oracle算加权平均的函数,EXCEL中用公式算加权平均值
  12. 若依代码生成使用教程
  13. 易企CMS采集助力网页快速收录
  14. 双系统蓝牙键盘的共享配对解决办法的简要步骤:win + arch~IRK、LTK、ERand、EDIV
  15. 虚拟信用卡绑定paypal验证的教程
  16. 2007.5 同航驾驶培训公司网站
  17. sat数学可以用计算机吗,SAT考试数学是否可以使用计算器
  18. 关于时区您了解多少呢?在中国我们使用的是哪个时区?
  19. UVA - 10118 Free Candies(记忆化搜索/状压)
  20. PBX、FXO、FXS等通信相关知识

热门文章

  1. 二进制转8421bcd码_码制 || BCD码 || 格雷码 || 奇偶校验码 || 字母数字码 || 数电
  2. 敏捷技术和管理方法思考列表---长期维护
  3. MATLAB车辆路径或物流分配或生产调度问题实例设计和代码
  4. C盘满了,要怎么清理才不会误删?
  5. js的onfocus与onblur的用法
  6. luci html 页面,luci更改登录账号.htm
  7. 我不是九爷 带你了解 docker实战命令
  8. BAT脚本清理注册表信息
  9. 自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 Training a GPT-2 language model Steps 7 to 9
  10. [CoreBluetooth] API MISUSE: can only accept this command while in the powered on state(iOS蓝牙)