因为 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" endelse return "setnx not null"end
2、间接应用 set(key,value,NX,PX,timeout) 指令,同时设置锁和超时工夫。
redis.call("SET", "lock", "true", "NX", "PX", "10000")
以上两种办法,应用哪种形式都能够。
开释锁的脚本两种形式都一样,间接调用 Redis 的 del 指令即可。