当前位置: 首页 > news >正文

java - lua - redis 完成商品库存的删减

java调用lua脚本完成对商品库存的管理

主页链接 微风轻吟挽歌的主页

如若有帮助请帮忙点赞
请添加图片描述

//lua脚本 获取到内存不够的商品StringBuilder sb = new StringBuilder();//定义一个数组存储可能缺少库存的值sb.append(" local  table = {} ");//获取值sb.append("  local values = redis.call('mget',unpack(KEYS)) ");//如果不够就放到table之中sb.append("  for i = 1, #KEYS do ");sb.append("     if tonumber(ARGV[i]) > tonumber(values[i]) then ");sb.append("         table[#table + 1] = KEYS[i] .. '=' .. values[i] ");sb.append("     end ");sb.append("  end");//判断 库存是否sb.append("  if #table > 0 then ");sb.append("  return table ");sb.append("  end ");sb.append("  for i = 1, #KEYS do  ");sb.append("  redis.call('decrby',KEYS[i],ARGV[i]) ");sb.append("  end ");sb.append("  return {} ");

lua 脚本的内容作业个简单的判断,相信逻辑大家都明白,只是lua脚本语言本身不太熟练,这里有一个简单模板,亲测可用 不一定时最优的模板

测试

这里的redisTemplate在官方jarbao中采用的jdk序列化方式导致中文乱码,我这里注入的是自己重写的(网上抄的),因为非本文重要内容,不再详述

   @AutowiredRedisTemplate<Object, Object> redisTemplate;@Resource(name = "redisTemplate")ValueOperations valueOperations;@ResourceStringRedisTemplate stringRedisTemplate;@Test//通过lua脚本多线程操作库存void get() throws IOException {String key1  = "apple";String key2  = "banana";String key3  = "栗子";//三个商品并设置其库存量valueOperations.set(key1,15L);valueOperations.set(key2,8L);valueOperations.set(key3,6L);//lua脚本 获取到内存不够的商品StringBuilder sb = new StringBuilder();//定义一个数组存储可能缺少库存的值sb.append(" local  table = {} ");//获取值sb.append("  local values = redis.call('mget',unpack(KEYS)) ");//如果不够就放到table之中sb.append("  for i = 1, #KEYS do ");sb.append("     if tonumber(ARGV[i]) > tonumber(values[i]) then ");sb.append("         table[#table + 1] = KEYS[i] .. '=' .. values[i] ");sb.append("     end ");sb.append("  end");//判断 库存是否sb.append("  if #table > 0 then ");sb.append("  return table ");sb.append("  end ");sb.append("  for i = 1, #KEYS do  ");sb.append("  redis.call('decrby',KEYS[i],ARGV[i]) ");sb.append("  end ");sb.append("  return {} ");RedisScript<List> script = RedisScript.of(sb.toString(),List.class);ExecutorService executorService = Executors.newCachedThreadPool();for (int i = 0; i < 10; i++) {int i1 = RandomUtil.randomInt(1, 5);executorService.execute(()->{List execute = stringRedisTemplate.execute(script,CollUtil.newArrayList(key1, key2, key3), String.valueOf(i1), String.valueOf(i1), String.valueOf(i1));if(execute.isEmpty()){System.out.println("库存足够,存储成功");return;}for (Object obj : execute){String[] split = obj.toString().split("=");System.out.println(StrUtil.format("商品{} 需求量:{} 库存不足,仅剩{}",split[0],i1,split[1]));}});}//测试中执行所以需要阻塞使用防止因为多线程执行的时候因为其他线程走完导致的测试结束System.in.read();}

测试结果

在这里插入图片描述
ok,这次的lua脚本就记录完毕。
那么开始正事请添加图片描述

相关文章:

java - lua - redis 完成商品库存的删减

java调用lua脚本完成对商品库存的管理 主页链接 微风轻吟挽歌的主页 如若有帮助请帮忙点赞 //lua脚本 获取到内存不够的商品StringBuilder sb new StringBuilder();//定义一个数组存储可能缺少库存的值sb.append(" local table {} ");//获取值sb.append(" …...

dbeaver离线安装clickhouse连接驱动

Clickhouse 数据库连接工具——DBeaver 主要介绍了Clickhouse 数据库连接工具——DBeaver相关的知识&#xff0c;希望对你有一定的参考价值。 Clickhouse 数据库连接工具——DBeaver 1.下载 DBeaver 和 连接驱动 https://dbeaver.io/files/dbeaver-ce-latest-x86_64-setup.…...

2024腾讯校招后端面试真题汇总及其解答(二)

11.如果同时有5个任务在10分钟之后提交,或者更多,那么如果是一个个从队列中拿数据,那么前一个任务会影响后续任务执行时间,说一下解决思路 你的问题是一个典型的并发处理问题。如果你的系统是单线程的,那么的确,前一个任务的执行时间会影响后续任务的执行时间。但是,你…...

datagrip 相关数据连接信息无缝迁移

背景 因为公司换电脑了&#xff0c;接触的项目比较多&#xff0c;不同项目&#xff0c;不同环境的数据库连接有好几十个&#xff0c;如果在新电脑上挨个重新连接一遍劳心劳力&#xff0c;所以想看一下能不能直接将之前保存的连接信息直接迁移到新的电脑上面。 为此&#xff0c…...

不就是G2O嘛

从零开始一起学习SLAM | 理解图优化&#xff0c;一步步带你看懂g2o代码 SLAM的后端一般分为两种处理方法&#xff0c;一种是以扩展卡尔曼滤波&#xff08;EKF&#xff09;为代表的滤波方法&#xff0c;一种是以图优化为代表的非线性优化方法。不过&#xff0c;目前SLAM研究的主…...

C#开发的OpenRA游戏之系统参数选项按钮

C#开发的OpenRA游戏之系统参数选项按钮 前面分析了信标按钮,从图上可以看到,靠右边的按钮,就是系统参数选项按钮: 这个按钮与前面三个按钮是不一样的,虽然它们在排列位置上是放在一起,但是处理的方法方式是不一样的,因为这个选项按钮,并不需要发命令给服务器,再返回来…...

苹果启动2024年SRDP计划:邀请安全专家使用定制iPhone寻找漏洞

苹果公司昨天&#xff08;8月30日&#xff09;正式宣布开始接受2024 年iPhone安全研究设备计划的申请&#xff0c;iOS 安全研究人员可以在 10 月底之前申请安全研究设备 SRD。 SRD设备是专门向安全研究人员提供的iPhone14Pro&#xff0c;该设备具有专为安全研究而设计的特殊硬…...

std::make_shared和new初始化智能指针的区别

先看代码&#xff1a; class Base {public:Base(int num):a(num) {std::cout << "Base() construct" << std::endl;}~Base() {std::cout << "Base() deconstruct" << std::endl;}int Get() {return a;}private:int a; };void tes…...

无涯教程-JavaScript - ERFC.PRECISE函数

描述 ERFC.PRECISE函数返回x和无穷大之间集成的互补ERF函数。 互补误差函数等于1-ERF(即1-误差函数),由等式给出- $$Erfc(x) \frac {2} {\sqrt {\pi}} \int_ {x} ^ {\infty} e ^ {-t ^ 2} dt $$ 语法 ERFC.PRECISE(x)争论 Argument描述Required/OptionalxThe lower bound…...

2023国赛数学建模C题思路分析 - 蔬菜类商品的自动定价与补货决策

# 1 赛题 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…...

手写Spring:第1章-开篇介绍,手写Spring

文章目录 一、手写Spring二、Spring 生命周期 一、手写Spring &#x1f4a1; 目标&#xff1a;我们该对 Spring 学到什么程度&#xff1f;又该怎么学习呢&#xff1f; 手写简化版 Spring 框架&#xff0c;了解 Spring 核心原理&#xff0c;为后续再深入学习 Spring 打下基础。在…...

C语言中,字节对齐是一种重要的内存管理概念

C语言中&#xff0c;字节对齐是一种重要的内存管理概念 字节对齐的目的是为了提高内存访问的效率。因为CPU访问内存的最小单位是字节&#xff0c;所以如果数据结构的成员以正确的字节边界对齐&#xff0c;那么CPU就可以直接访问这些成员&#xff0c;而不需要进行额外的内存移动…...

网络丢包问题,敢不敢这样定位?

下午好&#xff0c;我的网工朋友。 所谓丢包&#xff0c;是指在网络数据的收发过程中&#xff0c;由于种种原因&#xff0c;数据包还没传输到应用程序中&#xff0c;就被丢弃了。 这些被丢弃包的数量&#xff0c;除以总的传输包数&#xff0c;也就是我们常说的丢包率。 丢包…...

【漏洞复现】H3C路由器信息泄露任意用户登录

漏洞描述 通过访问特地址得到密码可进行登录。 免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff0c;未经授权请勿利用文章中…...

随机数算法,SQL

SELECT* FROMprizes_config WHEREweight > ( SELECT FLOOR( RAND() * MAX( weight )) FROM prizes_config ) order by weight asc-- LIMIT 1;记录 id 权重 1 5 2 10 3 50 4 100 找权重最大的那个值&#xff0c;调用rand()函数&#…...

什么是软件测试+软件测试的分类【软件测试】

软件测试 什么是软件&#xff1f; 软件 程序 数据 文档 软件测试的对象有哪些&#xff1f;程序 数据 文档 C/S与B/S架构 C/S&#xff1a;客户端服务器&#xff0c;这种就是我们一定要安装一个客户端才能够用的软件&#xff0c;就叫C/S。比如&#xff1a;微信、qq B/S&am…...

2023国赛C题解题思路:蔬菜类商品的自动定价与补货决策

本次将全程提供国赛C题完整解题思路及代码&#xff0c;同时共享一些国赛论文模板等资料&#xff0c;需要的小伙伴可以关注一下&#xff0c;持续更新&#xff01;大家也可以关注B站视频&#xff1a;不知名数学家小P 实时更新 本次C题是一道较为简单的统计分析题目&#xff0c;建…...

MIT6.824 Spring2021 Lab 1: MapReduce

文章目录 0x00 准备0x01 MapReduce简介0x02 RPC0x03 调试0x04 代码coordinator.gorpc.goworker.go 0x00 准备 阅读MapReduce论文配置GO环境 因为之前没用过GO,所以 先在网上学了一下语法A Tour of Go 感觉Go的接口和方法的语法和C挺不一样, 并发编程也挺有意思 0x01 MapRed…...

JavaScript 日期 – 如何使用 DayJS 库在 JS 中处理日期和时间

当涉及到在 JavaScript 中处理日期和时间时,开发人员经常发现自己正在努力应对内置对象的复杂性Date。 虽然普通 JavaScript 提供了基本功能,但使用起来可能相当麻烦,尤其是在处理解析、格式化和操作日期时。 这就是像 DayJS 这样的外部库发挥作用的地方,它提供了大量的优…...

Docker基础入门:Docker基础总结篇--超详细

Docker基础入门&#xff1a;Docker基础总结篇[docker3要素、docker安装配置、容器使用、镜像管理发布] 一、Docker 3要素1.1、镜像&#xff08;Image&#xff09;1.2、容器&#xff08;Container&#xff09;1.3、仓库&#xff08;Registry&#xff09;1.4 、总结 二、Docker安…...

对象临时中间状态的条件竞争覆盖

Portswigger练兵场之条件竞争 &#x1f984;条件竞争之对象临时中间状态的条件竞争 Lab: Partial construction race conditions&#x1f680;实验前置必要知识点 某些框架尝试通过使用某种形式的请求锁定来防止意外的数据损坏。例如&#xff0c;PHP 的本机会话处理程序模块…...

Nodejs 第十四章(process)

process 是Nodejs操作当前进程和控制当前进程的API&#xff0c;并且是挂载到globalThis下面的全局API API 介绍 1. process.arch 返回操作系统 CPU 架构 跟我们之前讲的os.arch 一样 arm、arm64、ia32、mips、mipsel、ppc、ppc64、s390、s390x、以及 x64 2. process.cwd() …...

数据分析因子评分学习

当多个因素影响一个结果时&#xff0c;我们需要综合考虑这些因素分别对结果德影响。因子评分就是用于比较其对结果德影响程度。 文章目录 前言一、案例背景二、解决方案&#xff08;一&#xff09;分析思路&#xff08;二&#xff09;剔除无关数据&#xff08;三&#xff09;求…...

【postgresql 基础入门】数据库服务的管理

数据库服务管理 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff…...

githubPage部署Vue项目

github中新建项目 my-web &#xff08;编写vue项目代码&#xff09; myWebOnline(存放Vue打包后的dist包里面的文件) 发布流程 &#xff08;假设my-web项目已经编写完成&#xff09;Vue-cli my-web vue.config.js文件中 const { defineConfig } require(vue/cli-service)…...

【网络编程】网络原来这么简单(更新中)

故事背景&#xff1a;有一天小胖和他的朋友细狗出去吃饭&#xff0c;聊着聊着就聊到了网络&#xff0c;小胖是学校里的编程大佬&#xff0c;而细狗只是个空有求知欲的编程小白。 细狗&#xff1a;胖儿啊&#xff0c;你说计算机是怎么通信的我感觉好抽象啊。为啥别人给我发个消息…...

监控系统典型架构

监控系统典型架构如下&#xff1a; 从左往右看&#xff1a; 采集器是负责采集监控数据的&#xff0c;采集到数据之后传输给服务端&#xff0c;通常是直接写入时序库。 对时序库的数据进行分析和可视化。 告警引擎产生告警事件之后交给告警发送模块做不同媒介的通知。 可视化比…...

jsp 新能源汽车论坛网Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 新能源汽车论坛网是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…...

Code Snippet的使用

文章目录 前言Code Snippet:就是咱们在VS中敲的prop、propfull、ctol【构造器快捷键】、for等快捷键&#xff0c;然后按tab键自动生成代码1.VS自带的&#xff1a;prop、propfull、ctol【构造器快捷键】、for等快捷键&#xff0c;直接使用2.自定义Snippet&#xff1a; 巨人的肩膀…...

华为云云服务器评测|华为云耀云L搭建zerotier服务测试

0. 环境 - Win10 - 云耀云L服务器 1. 安装docker 检查yum源&#xff0c;本EulerOS的源在这里&#xff1a; cd /etc/yum.repos.d 更新源 yum makecache 安装 yum install -y docker-engine 运行测试 docker run hello-world 2. 运行docker镜像 默认配…...

制作影视视频的软件/广州seo网站

数据传入时判断如果为0替换成" " series->label–>formatter里可以配置&#xff08;回调函数&#xff09; formatter: function(params) {if (params.value > 0) {return params.value;} else {return ;} },...

wordpress 添加表/推广方案策划

ylbtech-DatabaseDesgin:Microsoft-PetSop4.0(宠物商店)-数据库设计-OracleDatabaseName:PetShop(宠物商店) Model:宠物商店网站&#xff0c;批量创建用户 Type:专业网站 Url: 1.A&#xff0c;数据库关系图(Database Diagram) 返回顶部1.B&#xff0c;数据库设计脚本(Database …...

深圳 网站 设计/哈尔滨最新信息

题目描述 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ]实现思路 这道题目运用到了普通的回溯剪枝以及深度优先遍历。 原本应该是这样的&#xff1a; 我们可以看到&am…...

网站建设项目简介/关键词排名优化易下拉技巧

最稳定的几何形状是三角形&#xff0c;不是四边形&#xff0c;也不是五边形。那么是不是最稳定的就是最安全的呢&#xff1f;一旦三角形的一条边受损了&#xff0c;三角形就不复存在了。有没有比三角形更稳定、更安全、更可靠的关系网呢&#xff1f;DNA结构是分叉交错形的、可替…...

什么是网站分析/seo

Powered by:NEFU AB-IN Link 文章目录1275. 最大数题意思路代码1275. 最大数 题意 给定一个正整数数列 a1,a2,…,an&#xff0c;每一个数都在 0∼p−1之间。 可以对这列数进行两种操作&#xff1a; 添加操作&#xff1a;向序列后添加一个数&#xff0c;序列长度变成 n1&#x…...

企业网站为什么打不开/seo在线优化技术

一、inner join 内联查询查出满足on条件的两个表的公共交集。使用inner join时 inner可以省略。 select * from Student inner join Score on Student.SNoScore.SNo 二、left join 左外联查询&#xff0c;left outer join的简写。以左边的表为基准与右边的表进行关联&#xf…...