利用redis,模拟控制库存消耗场景
@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,模拟控制库存消耗场景相关推荐
- 在高并发的情况下,利用redis来处理库存超卖和遗留问题
在高并发的情况下,利用redis来处理库存超卖和遗留问题 首先现在redis中放上商品的库存数量为100间商品,在初始化一个set集合用于放秒杀成功的用户id,本用例先放进去一个id=10000的用户 ...
- 风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景
风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景,并采用快速前推法或同步回代消除法进行削减,可以对生成场景数和削减数据进行修改,下图展示的为1000个 ...
- 利用BAPI(BAPI_GOODSMVT_CREATE)投料消耗(261)销售订单E库存
BAPI_GOODSMVT_CREATE进行261投料的时候需注意的事项: 1.在项目中,利用BAPI(BAPI_GOODSMVT_CREATE)投料消耗(261)销售订单E库存,ITEM表中的销售订 ...
- Redis相关命令及使用场景介绍
1. Redis相关命令及使用 1.1 string 格式:(key:value) SET key value 添加一个key value 值(set 键 值) 127.0.0.1:6379> ...
- Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁
List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...
- Redis 的 8 大应用场景
转载自 Redis 的 8 大应用场景 之前讲过Redis的介绍,及使用Redis带来的优势,这章整理了一下Redis的应用场景,也是非常重要的,学不学得好,能正常落地是关键. 下面一一来分析下Re ...
- redis rua解决库存问题_如何解决高并发下的库存安全问题,没你想得那么复杂(附源码)...
一. 问题 不知道大家该开发中有没有遇到这样的一个问题,在电影院购票或者去网上买东西的时候,比方说当年哪吒大电影出来的时候,那抢票相当火爆啊,一票难求,那购票系统的后台是如何保证观众能买到自己喜欢的票 ...
- redis内存理解---内存消耗
高效利用内存首先需要理解redis内存消耗在哪里 有些内存消耗是必不可少的,有些内存是可以通过调整参数.合理使用来避免内存浪费. 内存消耗:进程自身消耗和子进程消耗. info memory used ...
- Redis的20种使用场景
本文介绍Redis除了缓存以外的使用场景. 测试源码:https://github.com/vehang/ehang-spring-boot/tree/main/spring-boot-011-red ...
- 利用Redis一步步实现优惠券的最终秒杀方案
订单ID不能采用自增长的原因: 1.规律变化太明显.两天下单的ID的差值,能够计算出商城的订单量: 2.如果采用自增长,订单数据是会不断产生的,到时候要分表,但是每个表的ID都是从0开始增长的,这样I ...
最新文章
- vant组件搜索并选择_借助PARTsolutions 选型助手,轻松快速地找到组件。
- Web移动应用调试工具——Weinre
- 深入理解java的泛型
- Python3 函数笔记
- javaWeb服务详解(含源代码,测试通过,注释) ——applicationContext-Service.xml
- 如何成为一个Java高薪架构师?
- SAP License:SAP结帐操作详细操作指南
- resin 配置 java_home_resin的安装与配置 - chencheng-linux的个人空间 - OSCHINA - 中文开源技术交流社区...
- [微信小程序]搜索功能实现,搜索框样式
- 全能程序员系列(十二)--开发人员该怎么做PPT?
- oracle算加权平均的函数,EXCEL中用公式算加权平均值
- 若依代码生成使用教程
- 易企CMS采集助力网页快速收录
- 双系统蓝牙键盘的共享配对解决办法的简要步骤:win + arch~IRK、LTK、ERand、EDIV
- 虚拟信用卡绑定paypal验证的教程
- 2007.5 同航驾驶培训公司网站
- sat数学可以用计算机吗,SAT考试数学是否可以使用计算器
- 关于时区您了解多少呢?在中国我们使用的是哪个时区?
- UVA - 10118 Free Candies(记忆化搜索/状压)
- PBX、FXO、FXS等通信相关知识
热门文章
- 二进制转8421bcd码_码制 || BCD码 || 格雷码 || 奇偶校验码 || 字母数字码 || 数电
- 敏捷技术和管理方法思考列表---长期维护
- MATLAB车辆路径或物流分配或生产调度问题实例设计和代码
- C盘满了,要怎么清理才不会误删?
- js的onfocus与onblur的用法
- luci html 页面,luci更改登录账号.htm
- 我不是九爷 带你了解 docker实战命令
- BAT脚本清理注册表信息
- 自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 Training a GPT-2 language model Steps 7 to 9
- [CoreBluetooth] API MISUSE: can only accept this command while in the powered on state(iOS蓝牙)