.NET library: a distributed dictionary implementing IDictionary<TKey, TValue>, IReadOnlyDictionary<TKey, TValue>, and non-generic IDictionary. It combines ZiggyCreatures.FusionCache (JSON values), RedLock.net (per-key distributed locks), and Redis (SET index for keys, Count, Keys, Values).
- NuGet package ID:
PLC.DistributedDictionary— nuget.org/packages/PLC.DistributedDictionary (after you publish) - Source: github.com/portlogicsvn/DistributedConcurrentDictionary
- Code namespace:
PLC.Shared.DistributedConcurrentDictionary(unchanged;usingstatements stay the same) - Package docs (install, quick start, API): src/DistributedConcurrentDictionary/README.md
- .NET SDK: 8.0, 9.0, or 10.0 (library multi-targets
net8.0,net9.0,net10.0; sample app targetsnet10.0) - Redis for integration tests, the sample app, and E2E (e.g.
localhost:6379)
| Path | Purpose |
|---|---|
src/DistributedConcurrentDictionary |
Library packaged to NuGet |
samples/DistributedConcurrentDictionary.Sample |
Spectre.Console demo (backplane, multi-process) |
tests/DistributedConcurrentDictionary.Tests |
xUnit tests (some scenarios skip without Redis) |
tests/e2e |
PowerShell multi-process checks against Redis |
Solution file: DistributedConcurrentDictionary.sln
dotnet build DistributedConcurrentDictionary.sln -c Releasedotnet test tests/DistributedConcurrentDictionary.Tests/DistributedConcurrentDictionary.Tests.csproj -c ReleaseOne command is enough. NuGet restores ZiggyCreatures.FusionCache, RedLock.net, and StackExchange.Redis automatically because they are package dependencies of this library (transitive restore).
dotnet add package PLC.DistributedDictionaryThe sample project references extra packages (FusionCache Redis backplane, Microsoft.Extensions.Caching.StackExchangeRedis, Spectre, etc.). Those are only required for the demo, not for referencing the library.
# Edit $repoRoot inside the script if your clone path differs
.\tests\e2e\run-backplane-e2e.ps1 -RedisConnection "localhost:6379"Logs: tests/e2e/results/<runId>/.
MIT (see PackageLicenseExpression in the library .csproj).