集群方式下的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 发货了,导致对应通…...
串口、终端应用程序 API termios
UART简介 串口全称为串行接口,也称为COM接口,串行接口指的是比特一位位顺序传输,通信线路简单。使用两根线就可以实现双向通信,一条为TX,一个为RX。串口通信距离远,但速度相对慢,是一种常用的工…...
【服务器搭建】教程七:如何为自己的网站添加运行时间?
前言 哈喽,大家好,我是木易巷! 上一篇服务器搭建个人网站教程是给大家介绍了:网站如何添加备案号? 今天分享:如何为自己的网站添加运行时间? 木易巷添加网页运行时间后的效果 其实和昨天的添…...
【消息中间件】Apache Kafka 教程
文章目录Apache Kafka 概述什么是消息系统?点对点消息系统发布 - 订阅消息系统什么是Kafka?好处用例需要KafkaApache Kafka 基础(一)消息系统1、点对点的消息系统2、发布-订阅消息系统(二)Apache Kafka 简介…...
ARM基础
文章目录1.ARM成长史1.1 ARM发展的里程碑11.2 ARM发展的里程碑21.3 ARM发展的里程碑31.4 ARM发展的里程碑42.ARM的商业模式和生态系统3.先搞清楚各种版本号3.1 ARM 的型号命名问题3.2 ARM 的几种版本号3.3 ARM型号的发展历程4.SoC和CPU的区别 & 外设概念的引入4.1 SoC和CPU…...
Python排序 -- 内附蓝桥题:错误票据,奖学金
排序 ~~不定时更新🎃,上次更新:2023/02/28 🗡常用函数(方法) 1. list.sort() --> sort 是 list 的方法,会直接修改 list 举个栗子🌰 li [2,3,1,5,4] li.sort() print(li) …...
容器化部署是什么意思?有什么优势?
多小伙伴不知道容器化部署是什么意思?不知道容器化部署有什么优势?今天我们就来一起看看。 容器化部署是什么意思? 容器化部署是指将软件代码和所需的所有组件(例如库、框架和其他依赖项)打包在一起,让它…...
1.设计模式简介
一、设计模式的目的 1. 代码重用性 2. 可读性 3. 可扩展性 4. 可靠性 5. 高内聚,低耦合 二、设计模式七大原则 1. 单一职责原则 1)降低类的复杂度,一个类只负责一项职责 2)提高类的可读性,可维护性 3&#x…...
【算法题解】实现一个包含“正负数和括号”的基本计算器
这是一道 困难 题。 题目来自:leetcode 题目 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 注意: 不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 提示: s 由数字、‘’、‘-’…...
网站服务器如何防护攻击?网站服务器被挂马如何检测
网站服务器是指安装在互联网上的服务器,主要用于提供网站服务。由于网站服务器的重要性,它也是攻击者的活动焦点,因此如何防护攻击就显得尤为重要。本文将分析网站服务器是如何被攻击的以及如何防护攻击。 网站服务器是怎么被攻击的? 网站…...
JavaSE16-面向对象-接口
文章目录一、概念二、格式1.使用interface来定义接口2.implements实现接口三、接口中的成员1.常用成员2.新增成员(不重要)2.1 默认方法2.2 静态方法2.3 私有方法四、继承关系 & 实现关系五、抽象类和接口的使用区别一、概念 接口就是规范\规则&…...
建设一个网站要多少钱/抚顺网络推广
网站微信登录,做起来挺简单的,我们做这个,首页是要去看微信文档,文档看懂了,然后理清楚逻辑,怎么进行绑定贵公司的账号,业务那块要理清楚! 首先,微信官方告诉我们&#…...
北京网站建设公司分享网站改版注意事项/百度seo培训
采样(sample): PCM audio不论是输入还是输出,都包含采样,采样达标声音的一个声道在某个特定时间点的振幅。 很多这样的采样组成了声音。样本是记录音频数据的最基本单位。对于CD audio,每秒有44100个采样。 采样的尺寸从8bit 到64…...
在线画画网站/app开发
SSD项目1.数据集2.SSD算法简介2.1 anchor2.1.1 特征图22,size0.3,ratio1的anchor2.1.2 特征图22,size0.3,ratio(1,2,0.5)的anchor2.1.3 特征图22,size(0.3,0.4),ratio(1,2,0.5)的anchor2.1.4 特…...
大连开发区网站建设/百度公司官方网站
在一次数据恢复之后,遇到了ORA-00600 kcbz_check_objd_typ_3错误,在此记录一下。首先 kcbz_check_objd_typ_3 这个错误的含义是: 当Oracle在检查内存中的数据块时,发现数据块上的对象号是错误的,随之抛出kcbz_check_ob…...
软件编程专业/seo查询seo
java中一个强大的功能,莫过于反射了。通常我们看看的Struct2、Struct1、Spring、Hibernate等等集合无一不使用了反射机制。那么什么是反射呢,到底有什么用呢? 一、反射机制概念 简单的讲,反射就是通过把指定的类中各种元素成分都…...
软件上传网站/东莞seo代理
最近数码圈新机发布的少,但操作系统却打的火热。这边鸿蒙OS2.0刚刚公测,那边Android 12系统就正式登场了。谷歌正式发布Android 12(1)开放的系统风格与操作界面这么多年以来,国产手机用的基本上都是安卓系统,虽然它们在此基础上设…...