On the redis documentation, I found a primitive lock can be implemented via SETNX:
http://redis.io/commands/setnx
C4 sends SETNX lo
Using redis >= 2.6 the LUA script solution would be great. Lua script always executed atomically so:
--lockscript, parameters: lock_key, lock_timeout
local lock = redis.call('get', KEYS[1])
if not lock then
return redis.call('setex', KEYS[1], ARGV[1], "locked");
end
return false
The another solution based on new options of SET command
SET lock_key "locked" EX lock_timeout NX
Using redis < 2.6 the pattern with multi can be used:
MULTI
SETNX tmp_unique_lock some_value
EXPIRE tmp_unique_lock
RENAMENX tmp_unique_lock real_lock
EXEC