Redission 最常用的可重入锁(Reentrant Lock)
Posted lovoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redission 最常用的可重入锁(Reentrant Lock)相关的知识,希望对你有一定的参考价值。
前言
在分布式项目中,如果采用本地锁synchronized,只能锁住当前服务器的资源,对于其它服务器的资源无效,如果有100万个周时访问同一接口的数据,还是会有相当一部份会去读取数据库,造成数据库的压力,而redission提供了一个相当完美的锁机制,解决了分布式项目的缓存问题。
流程图:
安装
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.14.1</version>
</dependency>
配置
@Configuration
public class MyRedissionConfig {
@Bean(destroyMethod = "shutdown")
public RedissonClient redisson() throws IOException {
Config config = new Config();
//config.useClusterServers().addNodeAddress("127.0.0.1:6379");
config.useSingleServer().setAddress("redis://192.168.16.149:6379");
return Redisson.create(config);
}
}
使用
在分布式项目中,当其中一个服务器接口中途断了,rlock会自动解锁,然后加上锁
@ResponseBody
@GetMapping("/hello")
public String hello(){
//获得锁
RLock rlock = redissonClient.getLock("rlock");
//加锁
rlock.lock();
try {
System.out.println("加锁成功了..........................");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}finally {
System.out.println("解锁:" + Thread.currentThread().getId());
//解锁
rlock.unlock();
}
return "hello";
}
以上是关于Redission 最常用的可重入锁(Reentrant Lock)的主要内容,如果未能解决你的问题,请参考以下文章
扒开Redisson的小棉袄,Debug深入剖析分布式锁之可重入锁No.1
分布式锁06-Zookeeper实现分布式锁:可重入锁源码分析