集群方式下的java Redis锁 lua脚本
下面说一下集群方式redis 下的原子锁 带超时时间java 代码如下:
List<String> keys =Collections.singletonList("test_key1");
System.out.println("打印前 ::"+jedisCluster.get("test_key1"));
//获取lua 脚本这里你可以所以 我是放在META-INF/scripts/redis/test.lua 路径下,
//获取到之后放到字符串String LUA 里边
URL url = Resources.getResource("META-INF/scripts/redis/test.lua");
List<String> lines = Resources.asCharSource(url, Charsets.UTF_8).readLines();
List<String> args = new ArrayList<>(2);
// 以当前时间戳作为value
args.add(DateUtil.dateToString(new Date(), DateUtil.DEFAULT_TIMESTAMP_FORMAT));
// 超时时间(单位秒)
long lockTimeMs = 5;
args.add(String.valueOf(lockTimeMs));
LUA = "";
lines.forEach(line->{
LUA += (line + "\n");
});
Object result =jedisCluster.eval(LUA, keys, args);
//这是另一种方式 作为一个 补充
jedisCluster.set("lockKey", "lockVal", "NX", "PX", 1000);
//注意这里是用另外一种方式,因为我们redis 大部分是集群方式,很少有单机
//我们这里可以灵活判断 具体走单机还是集群 进行 redis 家所
String result1 = (String)stringRedisTemplate.execute(new RedisCallback<String>() {
public String doInRedis(RedisConnection connection) throws DataAccessException {
Object nativeConnection = connection.getNativeConnection();
// 集群模式和单点模式虽然执行脚本的方法一样,但是没有共同的接口,所以只能分开执行
// 集群
if (nativeConnection instanceof JedisCluster) {
return (String) ((JedisCluster) nativeConnection).eval(LUA, keys,args);
}
// 单点
else if (nativeConnection instanceof Jedis) {
return (String) ((Jedis) nativeConnection).eval(LUA, keys, args);
}
return null;
}
});
System.out.println("打印::result "+result.toString());
System.out.println("打印getValueByKey::"+jedisCluster.get("test_key1"));
long tll =jedisCluster.ttl("test_key1");
System.out.println("打印::超时时间 单位秒"+tll);
Thread.sleep(6000);
System.out.println("打印::"+jedisCluster.get("test_key1"));
Lua脚本如下:
if redis.pcall('GET',KEYS[1]) == false then
if redis.pcall("SET", KEYS[1], ARGV[1]) =='OK' then
end
return redis.pcall("EXPIRE", KEYS[1], ARGV[2])
else
return redis.pcall('TTL',KEYS[1])
end
另一种写法:
if redis.pcall('EXISTS',KEYS[1]) == 0 then
return redis.pcall('SET', KEYS[1], ARGV[1], 'EX', ARGV[2])
else
return redis.pcall('TTL',KEYS[1])
end
相关文章:
集群方式下的java Redis锁 lua脚本
下面说一下集群方式redis 下的原子锁 带超时时间java 代码如下:List<String> keys Collections.singletonList("test_key1");System.out.println("打印前 ::"jedisCluster.get("test_key1"));//获取lua …...
【钓鱼实测】写bug给new bing和chatGPT查。问他们林黛玉倒拔垂杨柳
BUG 错误代码 #include <iostream> #include <vector> using namespace std; int main() {vector<int> vec{1,2,3,2,4};for (auto iter vec.begin(); iter ! vec.end(); iter ){if (*iter 2) {vec.erase(iter);}}cout << vec.size() << endl…...
基于OMAPL138+FPGA核心板多核软件开发组件MCSDK开发入门(上)
本文测试板卡为创龙科技 SOM-TL138F 是一款基于 TI OMAP-L138(定点/浮点 DSP C674x + ARM9)+ 紫光同创 Logos/Xilinx Spartan-6 低功耗 FPGA 处理器设计的工业级核心板。核心板内部OMAP-L138 与 Logos/Spartan-6 通过 uPP、EMIFA、I2C 通信总线连接,并通过工业级 B2B连接器引…...
C#/.net程序调用python
C#/.net程序调用python C#的优势在于window下的开发,不仅功能强大而且开发周期短。而python则有众多的第三方库,可以避免自己造轮子,利用C#来做界面,而具体实现使用python来实现可以大大提高开发效率。本文介绍如何使用pythonnet…...
一文讲清楚如何进行主数据编码
主数据编码作为一类重要的数据资源,在信息化建设中具有重要的地位和作用,是保证现有信息系统和未来新系统建设成功的关键因素,决定着系统中的信息一致性。 编码,是一件简单的事情,但绝对不是一件容易做好的事情&#…...
SAP 详解ST02
问:在st02中看到,Program和Export/Import的Swap出现红的了,这个是什么原因啊,是不是对系统的性能有影响啊,是否应该调整一些参数啊。要怎么调整呢? 复1:双击红色的部分就可以看到相应的参数修改…...
Go程序当父进程被kill,子进程也自动退出的问题记录
平常我们启动一个后台进程,会通过nouhp &的方式启动,这样可以在退出终端会话的时候,进程仍然可以继续在后台执行(进程的父进程id会从原来的bash进程变成1) 在go程序中,通过nouhp &的方式启动子进程,预期是即使…...
window10 下使用docmer-compose使用mysql镜像部署mysql
1. 在wins中找到store,安装Debian 2. 在桌面右键点击 linux shell窗口 3. 安装docker 4. 启动docker: service docker start 5. 配置加速器,为了拉取镜像更快,修改后得重新启动docker: vi /etc/docker/daemon.json…...
软件测试补充
软件开发的生命周期:需求-计划-设计-开发编码-测试-运行维护-上线 那我们的微信APP来进行举例: 需求:我需要你们团队做这样一个社交软件,能够像QQ一样实现聊天功能,发布说说的功能,能够群聊,可以转账 计划:计划软件…...
【算法】Tire字符串
作者:指针不指南吗 专栏:算法篇 🐾或许会很慢,但是不可以停下🐾 文章目录1.Trie的基本思想1.1什么是Trie1.2字符串条件1.3如何存储字符串1.4如何查找字符串2.Trie的代码实现2.1怎么用数组建树2.2完整代码1.Trie的基本思…...
【C++】STL——list的模拟实现
list的模拟实现 文章目录list的模拟实现一、list三个基本类的模拟实现总览二、节点类接口实现模拟实现构造函数三、迭代器类接口实现1.正向迭代器默认成员函数构造函数六种运算符重载 */->//--/!/2.反向迭代器四、list类接口实现1.默认成员函数1.1.构造函数1.2.析构函数1.3.…...
SpringBoot小区物业管理系统
文章目录 项目介绍主要功能截图:后台登录车位收费管理物业收费管理投诉信息管理保修信息管理基础信息管理数据分析部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获…...
外网跨网远程控制内网计算机3种方案
远程控制,通俗来讲就是在自己个人电脑直接远程访问另台主机电脑桌面操作。 如何远程控制电脑?远程控制别人计算机的方案通常有两种,一种是开启电脑系统自带的远程桌面功能,如果涉及跨网内、外网互通可以同时用快解析内网映射外网&…...
记录偶发更新失败问题
一,代码如下Transactional(rollbackFor Exception.class) public void updateDelivery(){ // 1.新增反馈记录 // 2.更新订单状态,及其他字段 // 3.新增变更履历 // 4.其他新增逻辑及与其他系统交互逻辑 }二,问题偶尔出现(概率极低…...
AI环境搭建步骤(Windows环境)
1. 安装好Anaconda3版本(1) 安装链接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?CM&OD本文使用Anaconda3下载链接:Anaconda5(2) 注意安装anaconda时一定要把环境变量加入windows环境中。要没有勾选,安装完后还有手动加入…...
Linux系统之history命令的基本使用
Linux系统之history命令的基本使用一、history命令介绍二、本地环境检查1本地系统版本2.检查操作系统的内核版本三、history的命令帮助四、history命令的基本帮助1.查看所有历史执行命令2.指定历史命令条数3.清除历史命令记录4.引用历史命令5.将历史文件中的信息读入到当前缓冲…...
花7000报了培训班,3个月后我成功“骗”进了阿里,月薪拿16K....
“月薪4000元不如报名学IT,挑战年薪百万”这是大多数培训班在互联网上宣传的口号,简单的16个字却戳中了很多人的痛点,同龄人买车买房,自己却拿着微薄的工资连好一点的房子都租不起,这句口号 彻底激起了底层员工的焦虑&…...
Java-枚举类的使用(详解)
枚举类的使用前言一、何为枚举类?二、自定义枚举类(JDK1.5之前)1、实现1.1 属性1.2 构造器2、代码演示三、用关键字enum定义枚举类(JDK 1.5)1、实现1.1 属性1.2 构造器2、代码演示四、Enum类的方法五、实现接口的枚举类…...
Docker----------Docker轻量级可视化工具Portainer/监控之 CAdvisor+InfluxDB+Granfana
1.是什么 Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。 2 官网 官网 https://www.portainer.io/ https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux 3.…...
景嘉微7201
220112-驱动与固件-景嘉微7201驱动与固件-三期超翔TF830JM7201显卡黑屏、花屏、竖线或待机唤醒黑屏JM72系列为了让驱动和系统内核解绑,驱动包含核内和核外两个驱动,两个驱动请都务必安装;最近JM7201 替代R7 340 发货了,导致对应通…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
