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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Innovabit.DotNet.Interceptors.Coordination.Redis" Version="2.0.117" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Innovabit.DotNet.Interceptors.Coordination.Redis" Version="2.0.117" />
                    
Directory.Packages.props
<PackageReference Include="Innovabit.DotNet.Interceptors.Coordination.Redis" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Innovabit.DotNet.Interceptors.Coordination.Redis --version 2.0.117
                    
#r "nuget: Innovabit.DotNet.Interceptors.Coordination.Redis, 2.0.117"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Innovabit.DotNet.Interceptors.Coordination.Redis@2.0.117
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Innovabit.DotNet.Interceptors.Coordination.Redis&version=2.0.117
                    
Install as a Cake Addin
#tool nuget:?package=Innovabit.DotNet.Interceptors.Coordination.Redis&version=2.0.117
                    
Install as a Cake Tool

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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