diff --git a/docs/10-鉴权体系.md b/docs/10-鉴权体系.md index db0feb9..be0f034 100644 --- a/docs/10-鉴权体系.md +++ b/docs/10-鉴权体系.md @@ -805,8 +805,9 @@ func (r *CachedUserRepository) DeleteRefreshToken(ctx, tokenHash) error { ``` **降级策略**: -- Redis 操作失败时记录日志,但不阻断主流程 +- Redis 操作失败时使用 `trace.FromContext(ctx)` 记录 Warn 日志(带 trace_id),但不阻断主流程 - DB 是唯一真实数据源,Redis 仅用于加速 +- 详见 `docs/13-日志追踪.md` — 存储层日志实现 ### 6. Gin 中间件实现 diff --git a/docs/11-令牌桶限流.md b/docs/11-令牌桶限流.md index 608dcc0..b2e44c6 100644 --- a/docs/11-令牌桶限流.md +++ b/docs/11-令牌桶限流.md @@ -360,7 +360,7 @@ if cfg.RateLimit.Enabled { logger.Log.Info("rate limiter initialized with Redis backend") } else { // 单实例:使用内存令牌桶 - limiter = ratelimit.NewLimiter(cfg.RateLimit) + limiter = ratelimit.NewMemoryLimiter(cfg.RateLimit) logger.Log.Info("rate limiter initialized with in-memory backend") } defer limiter.Stop() @@ -590,9 +590,9 @@ case "query": // 限流检查 if limiter != nil { key := fmt.Sprintf("%s:query", userID) - allowed, retryAfter := limiter.Allow(context.Background(), key) + allowed, retryAfter := limiter.Allow(ctx, key) if !allowed { - logger.Log.Warnw("rate limited", "user_id", userID, "retry_after", retryAfter) + // 限流触发时自动记录 Warn 日志(在 limiter 内部使用 trace.FromContext) errors.SendWSError(client, errors.CodeRateLimited, msg.RequestID, fmt.Errorf("rate limited, retry after %s", retryAfter.Round(time.Second))) continue @@ -605,7 +605,7 @@ case "query": **设计要点**: - key 格式:`userID:query`(用户级限流) - 拒绝时发送 `RATE_LIMITED` 错误到客户端 -- 记录警告日志(便于监控告警) +- 限流触发时 `RedisLimiter.Allow` 内部自动记录 Warn 日志(带 trace_id,详见 `docs/13-日志追踪.md`) - 不阻塞其他消息类型(`ping`/`config`/`interrupt` 不限流) ### 配置加载与依赖注入