一、依赖及配置
依赖
TypeScript
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.13.6</version>
</dependency>
配置
为config类设置redis地址端口和密码,用于创建RedissonClient对象,进行锁操作
java
@Configuration
public class RedissonConfig {
@Bean
public RedissonClient redissonClient(){
// 配置
Config config = new Config();
config.useSingleServer().setAddress("redis://192.168.150.101:6379")
.setPassword("123321");
// 创建RedissonClient对象
return Redisson.create(config);
}
}
基本使用
step1:获取指定一个指定名字锁的对象。
step2:尝试获取锁并接收boolean。
step3:执行业务并释放锁。
java
@Resource
private RedissionClient redissonClient;
@Test
void testRedisson() throws Exception{
//获取锁(可重入),指定锁的名称
RLock lock = redissonClient.getLock("anyLock");
//尝试获取锁,参数分别是:获取锁的最大等待时间(期间会重试),锁自动释放时间,时间单位
boolean isLock = lock.tryLock(1,10,TimeUnit.SECONDS);
//判断获取锁成功
if(isLock){
try{
System.out.println("执行业务");
}finally{
//释放锁
lock.unlock();
}
}
}
二、原理
(一)可重入实现
简单来说就是看到有锁的时候,不要直接放弃,而是再判断一下是不是当前线程自己的锁,这样同一个锁就可以让同一个线程反复进入。
这些是在reddison底层实现,平时开发可以不用考虑。由于这些操作很多,为了保证原子性,底层是用lua脚本去做的。


