Distributed lock with Redis and C# (based on the redlock algorithm)
Redlock-cs is available through nuget as redlock-cs-async package.
Check our Unit Test.
The API is based on antirez Ruby implementation and works as in the following example:
// Declare a Distributed Lock based on 3 REDIS servers
var dlm = new Redlock(
ConnectionMultiplexer.Connect("127.0.0.1:6379"),
ConnectionMultiplexer.Connect("127.0.0.1:6380"),
ConnectionMultiplexer.Connect("127.0.0.1:6381")
);
// Declare lock object.
Lock lockObject;
// Try to acquire the lock (with resourceName as lock identifier and an
// expiration time of 10 seconds).
var locked = dlm.Lock(
resourceName,
new TimeSpan(0, 0, 10),
out lockObject
);
// If locked is true, lockObject is populated and the lock has been acquired,
// otherwise the lock has not been acquired.
// Tries to release the lock contained in lockObject.
dlm.Unlock(lockObject);
- Disposable pattern.
- Hide StackExchange.Redis library inside Redlock object.