Skip to content

Implement milestone v12.5 — Core API Gaps#655

Merged
imperugo merged 5 commits into
masterfrom
feature/milestone-v12.5-core-api-gaps
Jul 1, 2026
Merged

Implement milestone v12.5 — Core API Gaps#655
imperugo merged 5 commits into
masterfrom
feature/milestone-v12.5-core-api-gaps

Conversation

@imperugo

@imperugo imperugo commented Jul 1, 2026

Copy link
Copy Markdown
Owner

Summary

Implements all 6 issues in the v12.5 milestone, closing the "Core API Gaps" release:

Version bumped from 12.2.0 to 12.5.0.

Documentation

  • Updated README with usage examples for all 6 features
  • Added doc/health-check.md — setup, status conditions, configuration
  • Added doc/distributed-cache.md — setup, expiration behavior, storage format, key prefix details
  • Updated doc/multipleServers.md — added Keyed DI Services with [FromKeyedServices] examples
  • Updated doc/asp.net-core/README.md — added Health Check and IDistributedCache setup sections

Test plan

  • 1125 tests passing on net10.0 (0 failures)
  • 1098 tests passing on net9.0 (1 pre-existing flaky timing test Massive_Add_With_Expiring)
  • net8.0 — CI will validate (runtime not installed locally)
  • New tests: 16 CacheClientTestBase (Wave 1), 3 RedisHealthCheckTests, 8 RedisDistributedCacheTests, 4 KeyedDiTests = 31 new tests
  • Build: 0 errors, 0 warnings across all TFMs

imperugo added 5 commits July 1, 2026 12:50
…, #654)

Add six enhancements closing the v12.5 milestone:

- IDistributedCache adapter with Hash-based sliding expiration,
  compatible with Microsoft.Extensions.Caching.StackExchangeRedis (#632)
- ASP.NET Core Health Check monitoring all connection pools with
  Healthy/Degraded/Unhealthy states based on pool health and PING (#633)
- StringIncrementAsync/StringDecrementAsync with long and double
  overloads for atomic counter operations (#634)
- SetCombineAsync/SetCombineAndStoreAsync for union, intersect, and
  difference operations on Redis Sets (#635)
- Key Management: KeyRenameAsync, KeyTypeAsync, KeyDumpAsync,
  KeyRestoreAsync for key-level operations (#636)
- .NET 8+ Keyed DI Services registering named IRedisClient and
  IRedisDatabase via [FromKeyedServices("name")] (#654)

Version bumped from 12.2.0 to 12.5.0 with release notes.
1125 tests passing (net10.0), 0 failures.

Closes #632, closes #633, closes #634, closes #635, closes #636, closes #654
Update README with usage examples for IDistributedCache, Health Check,
Keyed DI Services, atomic counters, set combine, and key management.

Add dedicated doc pages for Health Check and IDistributedCache adapter.
Update Multiple Servers doc with Keyed DI ([FromKeyedServices]) usage.
Update ASP.NET Core integration doc with Health Check and IDistributedCache setup.
Add IDistributedCache, Health Check, Keyed DI, atomic counters, Set
Combine, and Key Management to llms.txt feature index.

Update configure skill with Health Check, IDistributedCache, and Keyed
DI registration examples.

Update scaffold skill with atomic counter, Set Combine, Key Management,
and IDistributedCache code patterns.

Update diagnose skill with IDistributedCache and Keyed DI
troubleshooting sections.
- Microsoft.SourceLink.GitHub 10.0.201 → 10.0.300 (13 projects)
- Microsoft.VisualStudio.Threading.Analyzers [17.14.*,18.0.0) → [18.7.*,19.0.0)
- coverlet.collector 8.0.1 → 10.0.1
- Microsoft.NET.Test.Sdk 18.4.0 → 18.7.0
- Remove local Threading.Analyzers version override from AspNetCore project

Claude-Session: https://claude.ai/code/session_01QeGdCh7izfbG3VGzSoVzgQ
RedisHealthCheck:
- Catch RedisConnectionException (most common production failure)
- PING each client individually, not just the default
- Handle empty GetAllClients() with clear error message
- Honor CancellationToken

RedisDistributedCache:
- Add null guards on constructor and all public methods
- Add CancellationToken.ThrowIfCancellationRequested() on all async methods
- Replace dead code (results.Length == 0) with correct null check
- Validate AbsoluteExpiration is in the future

IRedisClient:
- Extract const DefaultName to eliminate duplicate "default" literals

Tests:
- Health check: PING failure paths (RedisException, RedisTimeoutException,
  RedisConnectionException), empty clients, multi-client degraded
- Distributed cache: combined absolute+sliding TTL, absolute shorter than
  sliding, DateTimeOffset absolute, past expiration throws
- Keyed DI: default services alongside keyed, empty Name skips registration

Claude-Session: https://claude.ai/code/session_01QeGdCh7izfbG3VGzSoVzgQ
@imperugo imperugo merged commit aed5428 into master Jul 1, 2026
4 checks passed
@imperugo imperugo deleted the feature/milestone-v12.5-core-api-gaps branch July 1, 2026 12:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant