跳到主要内容

SET key value NX EX expiration Lock

2025年01月20日
柏拉文
越努力,越幸运

一、认识


分布式锁 最常见的是使用 SET key value NX EX expiration 创建锁,NX 确保不存在才设置,EX 设置过期时间。使用 Lua 脚本,确保只有持有锁的客户端才能删除锁。这种实现方式适合单实例、小规模使用。

二、实现


async function acquireLock(redis, key, value, expiration) {
const result = await redis.set(key, value, "NX", "EX", expiration);
return result === "OK";
}

async function releaseLock(redis, key, value) {
const script = `
if redis.call("GET", KEYS[1]) == ARGV[1] then
return redis.call("DEL", KEYS[1])
else
return 0
end
`;
return await redis.eval(script, 1, key, value);
}
  • acquireLock:使用 SET key value NX EX expiration 创建锁,NX 确保不存在才设置,EX 设置过期时间。

  • releaseLock:使用 Lua 脚本,确保只有持有锁的客户端才能删除锁。