Search code examples
redisvalkey

Does Redis need locking?


I read that Redis is single threaded and all commands are atomic. But there are also references talk about locks in Redis, e.g. https://redis.io/topics/distlock

It is not clear to me why Redis still need locks if it is single threaded. Can someone please explain?


Solution

  • No, Redis doesn't need locking.

    Yes, Redis is single-threaded. The locks we are talking about here are not for Redis, but using Redis for a Distributed Lock.

    The purpose of a distributed lock is to ensure that among several nodes that might try to do the same piece of work, only one actually does it (at least only one at a time). That work might be to write some data to a shared storage system, to perform some computation, to call some external API, or suchlike.

    From: How to do distributed locking

    These several nodes are workloads you have on other servers. You are using Redis kind-of as a RAM-shared-memory to implement the lock.

    Redis is an excellent choice for a distributed lock because it gives you sub-millisecond latency as it is an in-memory database. For an example of such a lock implemented with Redis see python-redis-lock.