SuperAPI AI 工具集

redis

数据与分析

查看项目

更新于 10-16 04:38

技能介绍

用途

该技能用于在 Sorcha 平台中实现 Redis 缓存、会话管理与分布式协调。Sorcha 通过 StackExchange.Redis 使用 Redis,覆盖缓存、令牌吊销跟踪、限流和分布式协调等场景。所有服务共享一个由 .NET Aspire 管理的单一 Redis 实例,并具备断路器弹性。

主要能力

  • 缓存:通过 ICacheStore 进行读写,支持 TTL 自动过期。
  • 令牌吊销跟踪:在 JWT 过期前将其标记为已吊销。
  • 限流:使用计数器保护认证端点免受暴力破解。
  • 分布式协调:借助 Redis 集合等结构进行跨服务协调。
  • 弹性:断路器在连续失败后断开,实现优雅降级。

使用方式

Aspire 配置

// 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);

缓存存储用法

// 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));
    }
}

直接使用 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);
    }
}

核心概念

概念 用途 示例
键前缀 命名空间隔离 sorcha:, auth:
TTL 自动过期 TimeSpan.FromMinutes(15)
断路器 优雅降级 连续 5 次失败后断开
集合 令牌跟踪 SetAddAsync, SetMembersAsync
计数器 限流 StringIncrementAsync

常见模式

限流

适用场景:保护认证端点免受暴力破解。

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;
}

令牌吊销

适用场景:在 JWT 过期前使其失效。

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);
}

相关技能

  • aspire:Redis 资源配置与服务发现
  • jwt:令牌吊销集成
  • signalr:用于横向扩展的 Redis 背板
  • docker:Redis 容器配置

文档资源

可使用 Context7 获取最新的 Redis 与 StackExchange.Redis 文档。

使用 Context7 的方法:

  • 使用 mcp__context7__resolve-library-id 搜索 "StackExchange.Redis" 或 "redis"
  • 概念类内容优先使用网站文档(/websites/redis_io)
  • .NET 特定模式使用 /stackexchange/stackexchange.redis

库 ID:

  • /stackexchange/stackexchange.redis - .NET 客户端(344 个片段)
  • /websites/redis_io - Redis 概念(29k+ 片段)

推荐查询:

  • "Connection pooling multiplexer patterns best practices"
  • "Caching patterns TTL expiration strategies"
  • "Pub/Sub patterns distributed systems"

限制

资料未提供该技能的收费、价格、平台支持范围、性能指标或效果保证等信息。