当前位置:网站首页>Redisson 分布式锁
Redisson 分布式锁
2022-08-09 23:33:00 【川流不息的车呀】
@Service
@Slf4j
public class RedissonUtils {
@Autowired
private RedissonClient redissonClient;
public RLock lock(String s, int seconds) {
RLock rlock = redissonClient.getLock(s);
rlock.lock(seconds, TimeUnit.SECONDS);
return rlock;
}
}
Redis 版本比较高的,连接redis地址要加redis://,否则连接会报错
@Configuration
@EnableConfigurationProperties(RedisProperties.class)
public class RedissonConfiguration {
@Autowired
private RedisProperties redisProperties;
@Bean
public RedissonClient redissonClient() {
Config config = new Config();
String redissonAddr = "redis://" + redisProperties.getHost() + ":" + redisProperties.getPort();
config.useSingleServer().setAddress(redissonAddr);
config.useSingleServer().setDatabase(redisProperties.getDatabase());
return Redisson.create(config);
}
}配置文件获取redis配置参数:
@Component
@ConfigurationProperties(prefix = "spring.redis")
@Data
public class RedisProperties {
private String host;
private Integer port;
private Integer database;
}
具体使用如下:
首先unlock最好写在finally里面,不管异常情况,最终都会执行,防止异常情况下,锁没有及时删除的情况(虽然设置过期时间,如果过期时间比较长,下次调用会获取不到锁)
if (locked.isLocked() && locked.isHeldByCurrentThread())
锁过期时间短,已经删除的情况下使用。否则报错:java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node
@Override
public void setUpShop(setUpRequest request){
RLock locked = null;
try {
String key = "设置的key";
locked = redissonUtils.lock(key, 1);
if (locked != null) {
//处理业务
}
} finally {
if (locked != null) {
//判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
if (locked.isLocked() && locked.isHeldByCurrentThread()) {
locked.unlock();
}
}
}
}边栏推荐
猜你喜欢

【集训DAY3】中位数

vmware Exsi 网卡配置

781. 森林中的兔子

ECCV 2022 | 微软开源TinyViT :搞定小模型的预训练能力
![[SUCTF 2019]CheckIn (.htaccess和.user.ini)](/img/43/9e5a501410d2b957969b713d4fe209.png)
[SUCTF 2019]CheckIn (.htaccess和.user.ini)
![[C language] In-depth understanding of pointers and arrays (issue 4)](/img/22/ad31b47bb8cc1722121959efddefd5.png)
[C language] In-depth understanding of pointers and arrays (issue 4)

framework源码读后感

Leecode-205. 同构字符串

共创 Ray 中文社区,Ray Forward Meetup 2022 直播邀你参加!

Creo5.0 introductory tutorial free material
随机推荐
ES6 从入门到精通 # 15:生成器 Generator 的用法
Leetcode81. 搜索旋转排序数组 II
下载markdown软件Obsidian(解决官网下载速度慢)
const修饰指针的三种情况
线程的同步与互斥
FreeRTOS任务基础
labelme标注的json标签转txt格式
Creo5.0 introductory tutorial free material
【猜凶手,猜名次,杨辉三角】经典小学奥数的代码逻辑是什么?
【剑指offer】第一题 第二题
Golden Warehouse Database KingbaseGIS User Manual (6.5. Geometry Object Editing Function)
【集训DAY5】堆箱子【数学】
NTP SERVICE TASK 在GWserver配置、启用NTP服务,为当前环境提供时钟同步服务,Client主机可以从该服务器同步时间。
从TRPO到PPO(理论分析与数学证明)
Golden Warehouse Database KingbaseGIS User Manual (6.6. Geometric Object Verification Function, 6.7. Spatial Reference System Function)
【数据存储】signed,unsigned到底怎么区分?如何计算?
第十五章 mysql存储过程与存储函数课后练习
聚焦热点 | ISC 2022软件供应链安全治理与运营论坛圆满落幕
WPF DataGrid 使用数据模板
第十二,十三章 mysql数据类型,视图的课后练习