官网:https://redisson.org/
官方文档:https://redisson.org/docs/getting-started/
官方中文文档:https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95
1、引入依赖
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.13.6</version>
</dependency>
2、配置Redisson客户端
(1)程序化配置方法
参考官网:
@Configuration
public class RedissonConfig {
@Bean
public RedissonClient redissonClient(){
// 配置
Config config = new Config();
// 如果是集群使用config.useClusterServers().setAddress()
config.useSingleServer().setAddress("redis://192.168.75.101:6379").setPassword("123321");
// 创建RedissonClient对象
return Redisson.create(config);
}
}
(2)文件方式配置
当然也可以如果yml的方式进行配置,参考官方文档如下:https://github.com/redisson/redisson/wiki/2.-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95#22-%E6%96%87%E4%BB%B6%E6%96%B9%E5%BC%8F%E9%85%8D%E7%BD%AE
还有一些配置详细信息:
这里我们使用程序化配置方式 !
3、简单使用Redisson的分布式锁
这里讲可重入锁:
参考:8. 分布式锁和同步器 · redisson/redisson Wiki · GitHub
@Resource
private RedissionClient redissonClient;
@Test
void testRedisson() throws Exception{
//获取锁(可重入),指定锁的名称
RLock lock = redissonClient.getLock("myLock");
//尝试获取锁,参数分别是:获取锁的最大等待时间(期间会重试),锁自动释放时间,时间单位
boolean isLock = lock.tryLock(1,10,TimeUnit.SECONDS);
//判断获取锁成功
if(isLock){
try{
System.out.println("执行业务");
}finally{
//释放锁
lock.unlock();
}
}
}
Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟
剩余其余锁可以参考官方文档。
4、分布式锁原理
Redisson分布式锁原理:
•可重入:利用hash结构记录线程id和重入次数
•可重试:利用信号量和PubSub功能实现等待、唤醒,获取锁失败的重试机制
•超时续约:利用watchDog机制,开启一个定时任务,每隔一段时间(releaseTime / 3),重置超时时间