当前位置:网站首页>Redis redisTemplate.execute 执行锁
Redis redisTemplate.execute 执行锁
2022-08-09 23:33:00 【川流不息的车呀】
Redis 脚本执行redis锁代码如下:
/**
* 加锁
*/
public final static String SCRIPT_LOCK = "local key = KEYS[1];\n"
+ "local value = ARGV[1];\n"
+ "local ttlMillis = tonumber(ARGV[2]);\n"
+ "if ( redis.call('SETNX', key, value) == 1 ) then\n"
+ " redis.call('PEXPIRE', key, ttlMillis);\n"
+ " return true;\n"
+ "end;";
public boolean tryLock(String key, String val, Long timeMillis) {
return tryLock(RedisConstants.KEY + key,SCRIPT_LOCK, val, timeMillis,
TimeUnit.MILLISECONDS);
}
public boolean tryLock(String key, String scriptText, String val, Long timeout, TimeUnit unit) {
DefaultRedisScript<Boolean> script = new DefaultRedisScript<>();
script.setScriptText(scriptText);
script.setResultType(Boolean.class);
long rawTimeout = TimeoutUtils.toMillis(timeout, unit);
return redisTemplate.execute(script, Collections.singletonList(key), val, rawTimeout);
}
@Configuration
public class RedisTemplateAutoConfiguration {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory rcf) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(rcf);
//使用StringRedisSerializer对Key序列号,使用Jackson对Value序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
边栏推荐
- [SSH]如何敲一条线
- ETCD快速入门-02 ETCD安装
- 解锁时间生成与比较
- CST Studio Suite 2021软件安装包和安装教程
- 拼多多店铺运营不得不知的留个运营小知识
- 分布式数据库难题(二):数据复制
- 第十五章 mysql存储过程与存储函数课后练习
- 共创 Ray 中文社区,Ray Forward Meetup 2022 直播邀你参加!
- Kubernetes 开发环境比对
- Golden Warehouse Database KingbaseGIS User Manual (6.6. Geometric Object Verification Function, 6.7. Spatial Reference System Function)
猜你喜欢
mysql无法远程连接 Can‘t connect to MySQL server on ‘xxx.xxx.xxx.xxx‘ (10060 “Unknown error“)
【C语言】指针和数组的深入理解(第四期)
字节技术面都过了,薪资都谈好了20K*13结果还是被刷了,问HR原因是。。。
WPF DataGrid 使用数据模板
Golden Warehouse Database KingbaseGIS User Manual (6.4. Geometry Object Access Function)
算法---整数替换(Kotlin)
【集训DAY3】阶乘【数学】
【SSL集训DAY2】Sort【树状数组】
YOLOV5学习笔记(七)——训练自己数据集
7. type( )函数——查询数据类型
随机推荐
深入理解Aarch64内存管理
基于ABP的AppUser对象扩展
【问题解决】训练和验证准确率很高,但测试准确率很低
【集训DAY3】阶乘【数学】
游泳馆系统次卡的设置有哪些细节?
【obs】obsqsv11 硬编 及与metartc codec对比
7. type( )函数——查询数据类型
信息系统项目管理师核心考点(六十四)信息安全基础知识重要概念
Leetcode82. 删除排序链表中的重复元素 II
蔚来杯2022牛客暑期多校训练营7 CFGJ
Impala 疑问
[C language] In-depth understanding of pointers and arrays (issue 4)
The older tester has just passed the "hurdle" of being 35 years old, and I want to tell you something from my heart
Project (7) - PolarSeg point cloud semantic segmentation
ES6 Beginner to Mastery #13: Extension Methods for Arrays 2
JSP简介
GoLang 使用 goroutine 停止的几种办法
CST Studio Suite 2021软件安装包和安装教程
程序员从佩洛西窜访事件中可以学到什么?
hql语言