luttuce(RedisTempate)实现hash expire lua脚本
话不多说先放脚本:
local argv = ARGV
local length = #argv
if length > 0 then local unpackArgs = {}
for i = 1, length - 1 dotable.insert(unpackArgs, argv[i])
end
if redis.call('exists', KEYS[1]) == 1 thenredis.call('del', KEYS[1])redis.call('hset', KEYS[1], unpack(unpackArgs))redis.call('expire', KEYS[1], argv[length])return 1
elseredis.call('hset', KEYS[1], unpack(unpackArgs))redis.call('expire', KEYS[1], ARGV[#ARGV])return 2
end
end
2.直接String 执行LUA脚本
/*** lua 脚本 实现物料key 的赋值* @param hashKey 物料key* @param fieldsAndValues lua 脚本参数* @return*/public Long insertIntoHashWithExpireTime(String hashKey, Object... fieldsAndValues) {Long result = null;// unpack(ARGV)在Lua中是用来将数组解包成一系列单独的参数。// ARGV[#ARGV]获取的是传递给脚本的最后一个参数(在 Lua 中,# 操作符用于获取表中的元素数量。因此,ARGV[#ARGV] 将返回 ARGV 表中的最后一个元素。)// 请求案例:insertIntoHashWithExpireTimeIfKeyExists("myHash", "field1", "value1", "field2", "value2", 60);String luaScript ="\nlocal argv = ARGV \n" +"local length = #argv \n"+// 将1 - n-1 的入参写入新的数组"if length > 0 then local unpackArgs = {} \n" +"for i = 1, length - 1 do \n" +" table.insert(unpackArgs, argv[i]) \n" +"end\n" +"if redis.call('exists', KEYS[1]) == 1 then \n" +"\tredis.call('del', KEYS[1]) \n" +"\tredis.call('hset', KEYS[1], unpack(unpackArgs)) \n" +"\tredis.call('expire', KEYS[1], argv[length]) \n" +"\treturn 1 \n" +"else \n" +"\tredis.call('hset', KEYS[1], unpack(unpackArgs)) \n" +"\tredis.call('expire', KEYS[1], argv[length]) \n" +"\treturn 2\n" +"end \n" +"end ";log.info("luaScript:{}", luaScript);try {DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();redisScript.setResultType(Long.class);//返回类型是LongredisScript.setScriptText(luaScript);result = redisTemplate.execute(redisScript, Arrays.asList(hashKey), fieldsAndValues);log.debug("redisEVALLuaScript result :{}", result);} catch (Exception e) {e.printStackTrace();log.error("e:", e);}return result;}
@Testpublic void testLua(){String hashKey = "testHash";String field1 = "test3";String value1 = "vv1";String field2 = "test4";String value2 = "vv2";int expireTime = 10000;// 插入数据并设置过期时间redisUtils.insertIntoHashWithExpireTime(hashKey, field1, value1, field2, value2,expireTime);}
最终结果:

相关文章:
luttuce(RedisTempate)实现hash expire lua脚本
话不多说先放脚本: local argv ARGV local length #argv if length > 0 then local unpackArgs {} for i 1, length - 1 dotable.insert(unpackArgs, argv[i]) end if redis.call(exists, KEYS[1]) 1 thenredis.call(del, KEYS[1])redis.call(hset, KEYS[…...
【Xamarin】WebView连接局域网自动跳转外部浏览器问题的解决
xamarin在中国用的很少,但也有一些独到之处。例如用惯了Visual Studio的就很合适。而且类Java开发,几乎没什么障碍。 protected override void OnCreate(Bundle savedInstanceState) {base.OnCreate(savedInstanceState);Xamarin.Essentials.Platform.I…...
【Unity动画】实现不同的肢体动作自由搭配播放Layer+Avatar Mask
这个教程教你学会使用Unity 动画层配合布偶遮罩(AvaterMask) 实现从2个动画身上只保留部分肢体动作,然后搭配播放 例如:一个正常跑的动画片段,我只保留腿部动作,形成一个层叫Run_leg 然后在从一个攻击动作…...
将0x06(16进制)转换为二进制
将0x06(16进制)转换为二进制,可以按照如下步骤进行: 1. 将0x06中的字母"0x"去除。 2. 将数字"06"中的数字"0"去除。 3. 将数字"06"转换为二进制。 根据步骤1和步骤2,去除&q…...
考PRINCE2有用么?有PMP证书了还需要考PRINCE2吗?
有用的,PMP相当于是理论,PRINCE2是实践,对小白来说pmp考后再考一个prince2是很好的选择,对项目管理的小白来说更好入门。 先来说下 prince 2 和 pmp 的区别 一、prince 2 是什么?跟PMP有什么区别? prince…...
06进程间关系-学习笔记
Orphan Process孤儿进程 父进程先于子进程退出,子进程失去托管,这种子进程统称为孤儿进程 失效进程(孤儿进程):导致内存泄漏,影响新进程的创建孤儿进程的危害不可预测,如果一个孤儿进程持续的申…...
Vue的动画方式有几种
Vue的动画方式有几种? Vue的动画方式主要分成两大类,一类是CSS动画,一类是JS动画 CSS动画中包含transition以及animation,但在Vue中只需要通过transition封装组件实现。 CSS动画的类名主要包括:v-enter、v-enter-acti…...
PyTorch: 基于【VGG16】处理MNIST数据集的图像分类任务【准确率98.9%+】
目录 引言在Conda虚拟环境下安装pytorch步骤一:利用代码自动下载mnist数据集步骤二:搭建基于VGG16的图像分类模型步骤三:训练模型步骤四:测试模型运行结果后续模型的优化和改进建议完整代码结束语 引言 在本博客中,小…...
【lombok】从easyExcel read不到值到cglib @Accessors(chain = true)隐藏的大坑
背景: 在一次使用easyExcel.read 读取excel时,发现实体类字段没有值,在反复测试后,发现去掉Accessors(chain true)就正常了,为了验证原因,进行了一次代码跟踪 由于调用链路特别长,只列举出部分代码&#x…...
1-SaaS通识
云计算 讲SaaS必须先讲云计算。云计算通过互联网提供计算服务,包括服务器、存储、数据库、网络、应用等,采用按需付费的定价模式。 云计算的4种部署模式 公有云:由云服务商拥有和管理,就好比水电,居民共享ÿ…...
Spring Boot实现接口幂等
Spring Boot实现接口幂等 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…...
ShopsN commentUpload 文件上传漏洞复现
0x01 产品简介 ShopsN 是一款符合企业级商用标准全功能的真正允许免费商业用途的开源网店全网系统。 0x02 漏洞概述 ShopsN commentUpload 接口处存在任意文件上传漏洞,攻击者可以利用文件上传漏洞执行恶意代码、写入后门、读取敏感文件,从而可能导致服务器受到攻击并被控…...
【Qt5】ui文件最后会变成头文件
2023年12月14日,周四下午 我也是今天下午偶然间发现这个的 在使用Qt的uic(User Interface Compiler)工具编译ui文件时,会生成对应的头文件。 在Qt中,ui文件是用于描述用户界面的XML文件,而头文件是用于在…...
数组笔试题解析(下)
数组面试题解析 字符数组 (一) 我们上一篇文章学习了一维数组的面试题解析内容和字符数组的部分内容,我们这篇文章讲解一下字符数组和指针剩余面试题的解析内容,那现在,我们开始吧。 我们继续看一组字符数组的面试…...
PPT插件-好用的插件-图形缩放-大珩助手
图形缩放 包括适合屏幕、适合宽度、适合高度、水平翻转、垂直翻转、指定角度,可同时对多个形状进行操作 适合屏幕 一键设置图像、文本、形状的长宽尺寸与当前幻灯片一致 适合宽度 一键设置图像、文本、形状的宽度尺寸与当前幻灯片一致 适合高度 一键设置图像…...
五:爬虫-数据解析之xpath解析
五:数据解析之xpath解析 1.xpath介绍: xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素路径来完成对元素的查找,HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式 XPa…...
什么是Laravel?它有哪些特性?
Laravel 是一款流行的 PHP Web 框架,设计用于构建现代、优雅且功能强大的 Web 应用程序。它提供了一套丰富的工具和库,以简化常见的开发任务,同时保持灵活性和可扩展性。以下是 Laravel 框架的一些主要特性: 优雅的语法࿱…...
[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-3燃烧卡路里-系统分析实例
本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-3燃烧卡路里-系统分析实例 1. 数学模型2. 比例控制 Proprotional Control 1. 数学模型 2. 比例控制 Proprotional Control...
安恒明御安全网关 aaa_local_web_preview文件上传漏洞复现
0x01 产品简介 明御安全网关秉持安全可视、简单有效的理念,以资产为视角,构建全流程防御的下一代安全防护体系,并融合传统防火墙、入侵检测、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 0x02 漏洞概述 明御安全网关在…...
基于ssm企业人事管理系统的设计与实现论文
摘 要 进入信息时代以来,很多数据都需要配套软件协助处理,这样可以解决传统方式带来的管理困扰。比如耗时长,成本高,维护数据困难,数据易丢失等缺点。本次使用数据库工具MySQL和编程技术SSM开发的企业人事管理系统&am…...
MacOS Telegram语音实时转译:本地化音频捕获与离线语音识别实践
1. 项目概述:一个为MacOS打造的Telegram语音实时转译工具如果你和我一样,经常在Telegram上参与多语言群组讨论,或者需要处理来自不同地区的语音消息,那么语言障碍绝对是一个头疼的问题。想象一下,你收到一条长达一分钟…...
别再死记硬背了!Vivado伪双口RAM的wea、ena信号到底怎么用?一个实例讲透
Vivado伪双口RAM控制信号实战指南:从原理到避坑 第一次接触Vivado的伪双口RAM时,那些密密麻麻的控制信号确实让人头疼。尤其是wea和ena这两个看似简单却暗藏玄机的信号,稍不注意就会导致数据读取异常或者意外覆盖。记得去年我在一个图像处理项…...
RT-Thread Studio实战:搞定DS18B20温度读取的时序坑(附逻辑分析仪调试实录)
RT-Thread Studio实战:DS18B20温度读取的时序调试与逻辑分析仪应用 嵌入式开发中,单总线器件因其简洁的硬件连接而广受欢迎,但恰恰是这种"简单"往往隐藏着最棘手的调试难题。当你在RT-Thread环境下使用DS18B20温度传感器࿰…...
告别NuWriter!手把手教你用命令行打包新唐NUC980 SPI NAND完整系统镜像
新唐NUC980 SPI NAND量产化镜像构建实战指南 在嵌入式设备量产过程中,传统烧录方式往往成为效率瓶颈。当面对新唐NUC980这类基于SPI NAND的工控设备时,产线工程师常需要反复切换工具链、分步烧录不同组件,不仅耗时费力,还容易因人…...
3分钟搞定AI短视频:零门槛创作神器完全指南
3分钟搞定AI短视频:零门槛创作神器完全指南 【免费下载链接】MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频 Generate short videos with one click using AI LLM. 项目地址: https://gitcode.com/GitHub_Trending/mo/MoneyPrinterTurbo 还…...
AI幻灯片生成插件:架构设计与Prompt工程实战
1. 项目概述与核心价值最近在折腾一个基于AI的幻灯片生成工具,项目名叫“proyecto26/slides-ai-plugin”。这名字听起来有点技术范儿,但说白了,它就是一个能帮你用自然语言描述,自动生成PPT幻灯片内容的插件。想象一下,…...
Syncia:轻量级本地文件同步引擎的设计原理与实战部署指南
1. 项目概述:一个轻量级、高可用的本地文件同步引擎 最近在折腾个人工作流和跨设备数据同步时,我一直在寻找一个既轻量又可靠、能完全由自己掌控的解决方案。市面上的云盘服务虽然方便,但涉及到隐私、速度限制和订阅费用,总感觉不…...
5大理由:为什么UAV Log Viewer是你的无人机飞行数据分析终极工具
5大理由:为什么UAV Log Viewer是你的无人机飞行数据分析终极工具 【免费下载链接】UAVLogViewer An online viewer for UAV log files 项目地址: https://gitcode.com/gh_mirrors/ua/UAVLogViewer UAV Log Viewer是一款基于JavaScript开发的免费开源无人机飞…...
Paperless-ngx文档管理系统:5个关键技巧实现智能无纸化办公
Paperless-ngx文档管理系统:5个关键技巧实现智能无纸化办公 【免费下载链接】paperless-ngx A community-supported supercharged document management system: scan, index and archive all your documents 项目地址: https://gitcode.com/GitHub_Trending/pa/pa…...
水介导软模板 COF|MS 模拟细节全拆解
#MaterialsStudio #COF 模拟 #Nature 子刊 #科研干货 #分子模拟🔥Nature 子刊 COF 重磅突破!四川大学团队首次用软模板法做出有序分级孔 COF里面的 Materials Studio 模拟部分写得超规范新手做 COF 晶体模拟直接抄作业👇✅ 模拟工具与核心方法…...
