MyRedis分布式加锁解锁
warning:
这篇文章距离上次修改已过201天,其中的内容可能已经有所变动。
在Java中,你可以使用Redlock或者Redisson来实现Redis分布式锁。以下是使用Redisson实现的一个简单示例:
首先,添加Redisson的依赖到你的项目中(以Maven为例):
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.XX.X</version> <!-- 使用最新的稳定版本 -->
</dependency>
然后,你可以使用以下代码来获取和释放锁:
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import java.util.concurrent.TimeUnit;
public class RedisLockExample {
public static void main(String[] args) {
// 配置RedissonClient
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);
RLock lock = redisson.getLock("myLock");
try {
// 尝试获取锁,最多等待100秒,锁定之后最多持有锁10秒
boolean isLocked = lock.tryLock(100, 10, TimeUnit.SECONDS);
if (isLocked) {
// 业务逻辑
System.out.println("Lock acquired");
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 释放锁
if (lock.isHeldByCurrentThread()) {
lock.unlock();
System.out.println("Lock released");
}
}
// 关闭RedissonClient
redisson.shutdown();
}
}
在上述代码中,我们首先配置了RedissonClient,然后通过getLock
获取一个锁对象。使用tryLock
方法尝试获取锁,传入超时时间和锁的持有时间。在获取锁之后执行需要同步的代码,执行完毕后,通过unlock
方法释放锁。最后,确保关闭RedissonClient以释放资源。
评论已关闭