Java 使用 Redis 实现分布式锁示例
以下是一个简单的基于 Redis 实现的分布式锁的 Java 代码示例:
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.SetParams;
public class DistributedLock {
private static final String LOCK_KEY = 'distributed_lock';
private static final int LOCK_EXPIRE_TIME = 5000; // 锁的过期时间,单位毫秒
private static final int SLEEP_TIME = 100; // 线程休眠时间,单位毫秒
private Jedis jedis;
public DistributedLock(Jedis jedis) {
this.jedis = jedis;
}
public boolean lock() {
while (true) {
// 尝试获取锁
String result = jedis.set(LOCK_KEY, 'locked', SetParams.setParams().nx().px(LOCK_EXPIRE_TIME));
if ('OK'.equals(result)) {
return true; // 获取锁成功
}
// 休眠一段时间再重试
try {
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void unlock() {
jedis.del(LOCK_KEY);
}
}
使用示例:
Jedis jedis = new Jedis('localhost', 6379);
DistributedLock lock = new DistributedLock(jedis);
if (lock.lock()) {
try {
// 执行需要保证互斥的代码
} finally {
lock.unlock();
}
}
这个示例中,我们使用 Redis 的 set 命令来获取锁,其中 nx 选项表示只在键不存在时才设置值,px 选项表示设置键的过期时间。如果获取锁成功,返回 OK;否则返回 null。在获取锁失败后,我们通过线程休眠一段时间再重试,以避免一直占用 CPU 资源。释放锁时,我们直接删除对应的键即可。
原文地址: https://www.cveoy.top/t/topic/lOoh 著作权归作者所有。请勿转载和采集!