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
脚本,确保只有持有锁的客户端才能删除锁。