redsync | Distributed mutual exclusion lock using Redis for Go | Architecture library
kandi X-RAY | redsync Summary
kandi X-RAY | redsync Summary
Redsync provides a Redis-based distributed mutual exclusion lock implementation for Go as described in this post. A reference library (by antirez) for Ruby is available at github.com/antirez/redlock-rb.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of redsync
redsync Key Features
redsync Examples and Code Snippets
Community Discussions
Trending Discussions on redsync
QUESTION
I need to connect to a single Redis instance from an application client.
Since the client will be replicated in Kubernetes, I'm studying Redis documentation about locks to prevent races between the client replicas.
After some googling and reading around, I zeroed in on these two resources:
- the
SETNX
command described here: https://redis.io/commands/setnx - the Redlock algorithm described here: https://redis.io/topics/distlock
Interestingly the SETNX
docs explicitly advise against using SETNX
to implement locks, stating that it has basically become obsolete:
The following pattern is discouraged in favor of the Redlock algorithm [...]
We document the old pattern anyway because certain existing implementations link to this page as a reference.
However the Redlock algorithm is specifically tailored for distributed locks, thus when one seeks to lock on multiple Redis instances - they actually refer to multiple masters.
To go a bit further, the library redsync (golang) declares the New
function as follows:
ANSWER
Answered 2019-Jun-13 at 23:59Yes, it's true that the Redlock algorithm is designed for a distributed Redis system, and that if you're using a single instance it should be fine to use the simpler locking methods described in the SET and SETNX documentation.
However, a more important point is this: you probably don't need to use locks to avoid conflicts between multiple Redis clients. Redis locks are usually used to secure some external distributed resource (see my answer here for a bit more on this). Within Redis itself locks are generally not necessary; thanks to Redis' single-threaded nature, many commands are already atomic, and you have the ability to use transactions or Lua scripts to compose arbitrarily complex atomic operations.
So my advice is to deisgn your client code to use atomicity to avoid conflict rather than trying to use a lock (distributed or otherwise).
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install redsync
Redigo
Go-redis
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page