下面是基于 Spring Boot 和 Redisson 实现分布式锁的示例代码:
首先,在 pom.xml 文件中添加 Redisson 和 Redis 相关依赖:
<!-- Redisson -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.1</version>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
然后,在 application.yml 文件中配置 Redis 和 Redisson:
spring:
redis:
host: 127.0.0.1
port: 6379
password: password
database: 0
redisson:
# Redisson 单节点配置
single-server-config:
address: redis://127.0.0.1:6379
接着,在代码中注入 RedissonClient,获取分布式锁并进行加锁和解锁:
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
@Component
public class DistributedLockExample {
@Autowired
private RedissonClient redissonClient;
public void executeTask() {
// 获取锁
RLock lock = redissonClient.getLock("myLock");
boolean isLocked = false;
try {
// 尝试获取锁,等待时间为 10 秒,持有锁时间为 60 秒
isLocked = lock.tryLock(10, 60, TimeUnit.SECONDS);
if (isLocked) {
// 执行任务
System.out.println("Task is running...");
Thread.sleep(5000);
} else {
System.out.println("Task is locked by other process.");
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 释放锁
if (isLocked) {
lock.unlock();
}
}
}
}
以上代码中,首先注入 RedissonClient,然后通过 getLock()
方法获取分布式锁,并在 tryLock()
方法中指定了等待时间为 10 秒,持有锁时间为 60 秒。如果成功获取到锁,就执行任务,并在任务完成后释放锁。
需要注意的是,在使用 Redisson 实现分布式锁时,Spring Boot 会自动为我们创建一个 Redisson 客户端,并将其注入到 RedissonClient 对象中,无需手动创建和配置。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/161166.html