springboot redission 分布式锁
在Spring Boot中使用Redisson实现分布式锁可以通过以下步骤进行:
- 添加Redisson依赖到你的
pom.xml
中:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.2</version>
</dependency>
- 配置Redisson客户端,在
application.yml
或application.properties
中添加配置:
spring:
redisson:
address: redis://127.0.0.1:6379
password: your_password
- 在代码中使用Redisson提供的分布式锁:
import org.redisson.api.RedissonClient;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LockController {
@Autowired
private RedissonClient redissonClient;
@GetMapping("/lock")
public String lock() {
RLock lock = redissonClient.getLock("myLock");
try {
// 尝试加锁,最多等待100秒,锁定后最多持有锁10秒
boolean isLocked = lock.tryLock(100, 10, TimeUnit.SECONDS);
if (isLocked) {
// 业务逻辑
return "Lock acquired";
} else {
return "Lock not acquired";
}
} catch (InterruptedException e) {
e.printStackTrace();
return "Lock not acquired due to InterruptedException";
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
}
在这个例子中,我们创建了一个简单的REST控制器,其中包含一个获取分布式锁并在获得锁后执行一些操作的方法。我们使用tryLock
方法尝试获取锁,该方法接受超时参数,如果在指定时间内未能获得锁,则返回false
。在获得锁的情况下,执行相关业务逻辑,并在最后确保释放锁。
评论已关闭