以下是Java代码的示例,使用Redis实现分布式锁:
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.SetParams;
public class DistributedLock {
private static final String LOCK_KEY = "my_lock";
private static final int LOCK_EXPIRE_TIME = 5000; // 锁过期时间,单位毫秒
private Jedis jedis;
public DistributedLock(Jedis jedis) {
this.jedis = jedis;
}
public boolean lock() {
// 设置锁的参数
SetParams params = new SetParams();
params.nx(); // 只有不存在时才设置
params.px(LOCK_EXPIRE_TIME); // 设置过期时间,单位毫秒
// 尝试获取锁
String result = jedis.set(LOCK_KEY, "locked", params);
return "OK".equals(result);
}
public void unlock() {
// 删除锁
jedis.del(LOCK_KEY);
}
}
使用时,可以创建一个DistributedLock对象,然后在需要加锁的地方调用lock()方法尝试获取锁:
Jedis jedis = new Jedis("localhost");
DistributedLock lock = new DistributedLock(jedis);
if (lock.lock()) {
try {
// 在锁定期间执行需要保护的代码
} finally {
lock.unlock();
}
} else {
// 未能获取锁,处理失败情况
}