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);}

最终结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285891.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Opencv C++ 绘制中文

零、源码 GitHub - ITC-AI/Opencv_Chinese: C 的 Opencv绘制中文 一、代码编写 参考 https://blog.csdn.net/long630576366/article/details/131440684 1、cvxFont.h #ifndef OPENCVUNICODE_CVXFONT_H #define OPENCVUNICODE_CVXFONT_H#include <ft2build.h> #inclu…

RabbitMQ入门指南(一):初识与安装

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、消息队列介绍 1.同步调用和异步调用 2.常见消息队列介绍 二、RabbitMQ简介及其安装步骤 1.RabbitMQ简介 2.RabbitMQ安装步骤&#xff08;使用Docker&#xff09; (1) 创建网络 (2) 使用Docker来…

【LeetCode:1901. 寻找峰值 II | 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

初识Python之Networkx模块

初识Python之Networkx模块 文章目录 初识Python之Networkx模块简介安装Networkx导入模块、查看版本信息一些基本操作创建Graph添加边&#xff08;节点&#xff09;获取Graph的基本信息Graph的基本绘图 简单应用案例使用内置的Graph数据创建一个无向图创建一个有向图在计算机网络…

LinuxCNC系统安装

首先我们需要准备一个U盘来安装系统&#xff0c;然后进入Debian官网。操作系统处&#xff0c;点击“下载Debian”。 如果需要下载其他比较全版本&#xff0c;可以点击“其他下载链接”&#xff0c;选择DVD的安装&#xff0c;因为是国外的网站&#xff0c;最好不要选择网络安装。…

MSDN:Mutually Semantic Distillation Network for Zero-Shot Learning 中文版 待更新

摘要 零样本学习&#xff08;ZSL&#xff09;的关键挑战是如何将潜在的语义知识融合在可见类的视觉特征和抽象特征之间&#xff0c;从而实现向不可见类的横向知识转移。之前的工作要么只是将图像的全局特征与其相关的类语义向量对齐&#xff0c;要么利用单向注意力来学习有限的…

【Linux基础】3. 文件基本属性

文章目录 【 1. 文件的属主和属组 】【 2. 显示文件的类型、权限 】2.1 文件类型2.2 文件权限 【 3. 更改文件属性 】3.1 chgrp 更改文件属组3.2 chown 更改文件所有者3.3 更改文件权限3.3.1 数字法更改文件权限3.3.2 符号法更改文件权限 【 1. 文件的属主和属组 】 Linux 系统…

CentOS:Docker容器中安装vim

在使用docker容器时&#xff0c;里边没有安装vim时&#xff0c;敲vim命令时提示说&#xff1a;vim: command not found 这个时候就须要安装vim&#xff0c;安装命令&#xff1a; apt-get install vim 出现以下错误&#xff1a; 解决方法&#xff1a; apt-get update 这个命令的…

EMC测试与整改实践?|深圳比创达电子

电磁兼容(EMC)测试和整改是当今社会对电磁兼容(EMC)意识日益深入的表现&#xff0c;EMC测试与整改随着社会对电磁环境要求的不断提高&#xff0c;越来越受到重视&#xff0c;下面就EMC测试与整改实践进行一下详细介绍。 一、什么是EMC测试&#xff1f; EMC测试是指在一定的电…

RPC(3):HttpClient实现RPC之GET请求

1HttpClient简介 在JDK中java.net包下提供了用户HTTP访问的基本功能&#xff0c;但是它缺少灵活性或许多应用所需要的功能。 HttpClient起初是Apache Jakarta Common 的子项目。用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 H…

Nginx快速入门:Nginx应用场景、安装与部署(一)

1. Nginx简介 Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;也是一个非常流行的开源 Web 服务器软件。它是由俄罗斯程序员 Igor Sysoev 开发的&#xff0c;最初是为了解决在高并发场景下的C10k 问题&#xff08;即一个服务器进程只能处理 10,000 个并发连接&#x…

计算机论文写作助手

本人原创AI应用&#xff0c;现有公开&#xff0c;体验一下