lock脚本:lock.luaredis
-- Set a lock -- 若是获取锁成功,则返回 1 local key = KEYS[1] local content = KEYS[2] local ttl = ARGV[1] local lockSet = redis.call('setnx', key, content) if lockSet == 1 then redis.call('pexpire', key, ttl) else -- 若是value相同,则认为是同一个线程的请求,则认为重入锁 local value = redis.call('get', key) if(value == content) then lockSet = 1; redis.call('pexpire', key, ttl) end end return lockSet
unlock脚本: unlock.lualua
-- unlock key local key = KEYS[1] local content = KEYS[2] local value = redis.call('get', key) if value == content then( return redis.call('del', key); end return 0