分布式锁的实现

发布于:2023-06-17 ⋅ 阅读:(368) ⋅ 点赞:(0)

由于 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 指令即可。


微信公众号

今日签到

点亮在社区的每一天
去签到