关于redis:分布式锁的实现

5次阅读

共计 413 个字符,预计需要花费 2 分钟才能阅读完成。

因为 setnx 这个指令自身无奈设置超时工夫,所以个别会采纳两种方法来做这件事:

1、采纳 lua 脚本,在应用 setnx 指令之后,再应用 expire 命令去给 key 设置过期工夫。

if redis.call("SETNX", "lock", "true") == 1 then
  local expireResult = redis.call("expire", "lock", "10")
  if expireResult == 1 then
      return "success"
  else
      return "expire failed"
  end
else
  return "setnx not null"
end

2、间接应用 set(key,value,NX,PX,timeout) 指令,同时设置锁和超时工夫。

redis.call("SET", "lock", "true", "NX", "PX", "10000")

以上两种办法,应用哪种形式都能够。

开释锁的脚本两种形式都一样,间接调用 Redis 的 del 指令即可。

正文完
 0