Innovabit.DotNet.Interceptors.Coordination.Redis
2.0.117
dotnet add package Innovabit.DotNet.Interceptors.Coordination.Redis --version 2.0.117
NuGet\Install-Package Innovabit.DotNet.Interceptors.Coordination.Redis -Version 2.0.117
<PackageReference Include="Innovabit.DotNet.Interceptors.Coordination.Redis" Version="2.0.117" />
<PackageVersion Include="Innovabit.DotNet.Interceptors.Coordination.Redis" Version="2.0.117" />
<PackageReference Include="Innovabit.DotNet.Interceptors.Coordination.Redis" />
paket add Innovabit.DotNet.Interceptors.Coordination.Redis --version 2.0.117
#r "nuget: Innovabit.DotNet.Interceptors.Coordination.Redis, 2.0.117"
#:package Innovabit.DotNet.Interceptors.Coordination.Redis@2.0.117
#addin nuget:?package=Innovabit.DotNet.Interceptors.Coordination.Redis&version=2.0.117
#tool nuget:?package=Innovabit.DotNet.Interceptors.Coordination.Redis&version=2.0.117
Innovabit.DotNet.Interceptors.Coordination.Redis
Redis stores for
Innovabit.DotNet.Interceptors.Coordination.Abstractions:
[Idempotent] and [DistributedLock] hold across every instance of your service and survive a
restart.
Usage
services.AddSingleton<IConnectionMultiplexer>(_ => ConnectionMultiplexer.Connect("localhost:6379"));
services
.AddInterceptors()
.AddRedisCoordination(o => o.IdempotencyKeyPrefix = "contoso:idem:");
Idempotency
The result is stored as JSON under IdempotencyKeyPrefix + key with the retention as its TTL, and
handed back as the method's return value on a replay — so the result type has to round-trip through
System.Text.Json. A method with no result stores the literal null: the key existing is what says
"handled", never the value.
The serializer is deliberately not the redacting one the audit trail uses. An idempotency store returns the stored value to the caller as the method's result, so a redacted copy would not be a replay of the original call — it would be a wrong answer.
Locking
A lock is SET key token NX PX lease: taken only when free, expiring on its own so a holder that
dies does not block everyone forever. Releasing runs a Lua script that compares the token before
deleting, because a plain DEL would happily remove the lock a later holder took after this one's
lease expired — the classic way a lease-based lock stops excluding anything.
A failed release is swallowed: the lock expires anyway, so it costs a wait rather than a deadlock, and throwing there would replace the method's own result — or its own exception — with an infrastructure one.
The lease bounds the guarantee. A method that outlives its lease loses the lock while still
running and two copies can overlap. Size LeaseSeconds above the method's worst case.
| Option | Default |
|---|---|
IdempotencyKeyPrefix |
idem: |
LockKeyPrefix |
lock: |
LockRetryDelay |
50 ms — how often a waiting caller re-tries |
SerializerOptions |
System.Text.Json defaults |
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. 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
- Innovabit.DotNet.Interceptors.Coordination.Abstractions (>= 2.0.117)
- StackExchange.Redis (>= 3.4.29)
-
net8.0
- Innovabit.DotNet.Interceptors.Coordination.Abstractions (>= 2.0.117)
- StackExchange.Redis (>= 3.4.29)
- System.Text.Json (>= 10.0.14)
-
net9.0
- Innovabit.DotNet.Interceptors.Coordination.Abstractions (>= 2.0.117)
- StackExchange.Redis (>= 3.4.29)
- System.Text.Json (>= 10.0.14)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.117 | 39 | 10/31/2026 |
| 2.0.116 | 88 | 10/26/2026 |
| 2.0.115 | 107 | 10/17/2026 |
| 2.0.114 | 98 | 10/10/2026 |
| 2.0.113 | 106 | 10/3/2026 |
| 2.0.112 | 105 | 9/28/2026 |
| 2.0.111 | 103 | 9/28/2026 |
| 2.0.110 | 97 | 9/27/2026 |
| 2.0.109 | 101 | 9/26/2026 |
| 2.0.108 | 97 | 9/26/2026 |
| 2.0.107 | 105 | 9/26/2026 |
| 2.0.106 | 112 | 9/25/2026 |
| 2.0.105 | 107 | 9/25/2026 |
| 1.0.0.104 | 99 | 9/25/2026 |
| 1.0.0.103 | 94 | 9/25/2026 |