How to create a distributed lock with Redis?

前端 未结 5 1242
广开言路
广开言路 2020-12-28 17:37

On the redis documentation, I found a primitive lock can be implemented via SETNX:

http://redis.io/commands/setnx

  • C4 sends SETNX lo

5条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-28 18:18

    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
    

提交回复
热议问题