SpringBoot:SpringBoot中使用Redisson实现分布式锁
在Spring Boot中使用Redisson实现分布式锁,首先需要添加Redisson的依赖,然后配置RedissonClient,最后在业务代码中使用锁。
- 添加Redisson依赖到
pom.xml
:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.2</version>
</dependency>
- 在
application.yml
中配置Redisson:
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();
}
}
}
}
在这个例子中,我们创建了一个名为myLock
的分布式锁,并在/lock
端点被调用时尝试获取该锁。如果在100秒内获取到锁,锁将最多持有10秒。在释放锁之前,检查当前线程是否持有锁是一个好习惯。
评论已关闭