redis

Sorcha uses Redis via StackExchange.Redis for caching, token revocation tracking, rate limiting, and distributed coordination. All services share a single Redis instance managed by .NET Aspire with circuit breaker resilience.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "redis" with this command: npx skills add stuartf303/sorcha/stuartf303-sorcha-redis

Redis Skill

Sorcha uses Redis via StackExchange.Redis for caching, token revocation tracking, rate limiting, and distributed coordination. All services share a single Redis instance managed by .NET Aspire with circuit breaker resilience.

Quick Start

Aspire Configuration

// src/Apps/Sorcha.AppHost/AppHost.cs var redis = builder.AddRedis("redis") .WithRedisCommander();

// Reference from any service var blueprintService = builder.AddProject<Projects.Sorcha_Blueprint_Service>() .WithReference(redis);

Cache Store Usage

// Inject ICacheStore from Sorcha.Storage.Redis public class MyService(ICacheStore cache) { public async Task<User?> GetUserAsync(string id) { return await cache.GetAsync<User>($"user:{id}"); }

public async Task SetUserAsync(User user)
{
    await cache.SetAsync($"user:{user.Id}", user, TimeSpan.FromMinutes(15));
}

}

Direct IConnectionMultiplexer

// For operations beyond ICacheStore (Sets, rate limiting, etc.) public class TokenService(IConnectionMultiplexer redis) { private readonly IDatabase _db = redis.GetDatabase();

public async Task TrackTokenAsync(string userId, string jti)
{
    await _db.SetAddAsync($"auth:user_tokens:{userId}", jti);
}

}

Key Concepts

Concept Usage Example

Key prefix Namespace isolation sorcha: , auth:

TTL Automatic expiration TimeSpan.FromMinutes(15)

Circuit breaker Graceful degradation Breaks after 5 failures

Sets Token tracking SetAddAsync , SetMembersAsync

Counters Rate limiting StringIncrementAsync

Common Patterns

Rate Limiting

When: Protecting auth endpoints from brute force.

public async Task<bool> IsRateLimitedAsync(string identifier) { var key = $"auth:failed:{identifier}"; var count = await _db.StringIncrementAsync(key);

if (count == 1)
    await _db.KeyExpireAsync(key, TimeSpan.FromSeconds(60));

return count >= MaxFailedAttempts;

}

Token Revocation

When: Invalidating JWTs before expiration.

public async Task RevokeTokenAsync(string jti, DateTimeOffset expiresAt) { var ttl = expiresAt - DateTimeOffset.UtcNow; if (ttl > TimeSpan.Zero) await _db.StringSetAsync($"auth:revoked:{jti}", "revoked", ttl); }

See Also

  • patterns - Caching, resilience, key naming

  • workflows - Setup, testing, debugging

Related Skills

  • aspire - Redis resource configuration and service discovery

  • jwt - Token revocation integration

  • signalr - Redis backplane for scale-out

  • docker - Redis container configuration

Documentation Resources

Fetch latest Redis and StackExchange.Redis documentation with Context7.

How to use Context7:

  • Use mcp__context7__resolve-library-id to search for "StackExchange.Redis" or "redis"

  • Prefer website documentation (/websites/redis_io ) for concepts

  • Use /stackexchange/stackexchange.redis for .NET-specific patterns

Library IDs:

  • /stackexchange/stackexchange.redis

  • .NET client (344 snippets)

  • /websites/redis_io

  • Redis concepts (29k+ snippets)

Recommended Queries:

  • "Connection pooling multiplexer patterns best practices"

  • "Caching patterns TTL expiration strategies"

  • "Pub/Sub patterns distributed systems"

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

entity-framework

No summary provided by upstream source.

Repository SourceNeeds Review
General

signalr

No summary provided by upstream source.

Repository SourceNeeds Review
General

scalar

No summary provided by upstream source.

Repository SourceNeeds Review
General

xunit

No summary provided by upstream source.

Repository SourceNeeds Review