Rwx.DistributedLocking.Redis
0.3.1
dotnet add package Rwx.DistributedLocking.Redis --version 0.3.1
NuGet\Install-Package Rwx.DistributedLocking.Redis -Version 0.3.1
<PackageReference Include="Rwx.DistributedLocking.Redis" Version="0.3.1" />
<PackageVersion Include="Rwx.DistributedLocking.Redis" Version="0.3.1" />
<PackageReference Include="Rwx.DistributedLocking.Redis" />
paket add Rwx.DistributedLocking.Redis --version 0.3.1
#r "nuget: Rwx.DistributedLocking.Redis, 0.3.1"
#:package Rwx.DistributedLocking.Redis@0.3.1
#addin nuget:?package=Rwx.DistributedLocking.Redis&version=0.3.1
#tool nuget:?package=Rwx.DistributedLocking.Redis&version=0.3.1
Rwx.DistributedLocking.Redis
Redis-backed implementation of Rwx.DistributedLocking.IDistributedLock, using a SET NX PX
acquire and a Lua compare-and-delete release so a lock is only ever released by the handle that
acquired it.
Install
dotnet add package Rwx.DistributedLocking.Redis --version 0.2.0
Quick start
Install Rwx.DistributedLocking.Abstractions in any application project that injects
IDistributedLock.
using Rwx.DistributedLocking.Redis;
builder.Services.AddRwxDistributedLocking(builder.Configuration);
await using IDistributedLockHandle? handle = await distributedLock.TryAcquireAsync(
"migrations:iam", timeout: TimeSpan.FromMinutes(2), cancellationToken);
if (handle is null)
{
// another instance holds the lock — skip, don't retry forever
return;
}
// protected work
The default connection-string name is Redis:
{
"ConnectionStrings": {
"Redis": "localhost:6379"
},
"DistributedLocking": {
"LeaseDuration": "00:05:00",
"RetryInterval": "00:00:00.250"
}
}
Pass a different connection-string name as the third argument when needed. The module equivalent
is RwxDistributedLockingModule. Opens its own IConnectionMultiplexer — independent of any
connection Rwx.Caching.Redis manages internally.
Boundaries
Single-Redis lock (SET NX PX + token-checked release), not the multi-node Redlock algorithm —
sufficient once LeaseDuration comfortably exceeds how long the protected work normally takes, so
a crashed holder's lock still self-expires. Don't use this as a substitute for a database
constraint when one is available.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.9)
- Microsoft.Extensions.DependencyInjection (>= 10.0.9)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.9)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.9)
- Microsoft.Extensions.Logging (>= 10.0.9)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.9)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.9)
- Rwx.Core (>= 0.3.1)
- Rwx.DistributedLocking.Abstractions (>= 0.3.1)
- StackExchange.Redis (>= 2.13.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.