diff --git a/redis/redis.go b/redis/redis.go index 8d393b2..8209d79 100644 --- a/redis/redis.go +++ b/redis/redis.go @@ -382,21 +382,13 @@ func IsUserActive(ctx context.Context, userId string, seconds int64) (bool, erro return false, nil // 未找到记录,视为不活跃 } + // 检查时间差 now := gtime.Now().Timestamp() return (now - lastActive) < seconds, nil } -// SetSessionCache 缓存用户的 RAGFlow Session ID -// 使用 gredis SetEX 方法 -func SetSessionCache(ctx context.Context, userId, sessionId string) error { - key := SessionLastActiveKeyPrefix + userId + ":session_id" +// ============== 限流相关 ============== - // SETEX key 604800 value (604800秒 = 7天) - _, err := redisClient.Do(ctx, "SETEX", key, 604800, sessionId) - return err -} - -// 限流相关常量 const ( // RateLimitKeyPrefix 限流计数器 Key 前缀 RateLimitKeyPrefix = "ragflow:ratelimit:" @@ -433,9 +425,17 @@ func GetRateLimit(ctx context.Context, key string) (count int64, err error) { return } -// GetSessionCache 获取缓存的 RAGFlow Session ID -func GetSessionCache(ctx context.Context, userId string) (string, error) { - key := SessionLastActiveKeyPrefix + userId + ":session_id" +// SetSessionCache 缓存 RAGFlow Session ID(租户+用户+方向隔离) +func SetSessionCache(ctx context.Context, tenantId, userId, chatId, sessionId string) error { + key := SessionLastActiveKeyPrefix + tenantId + ":" + userId + ":" + chatId + ":session_id" + // SETEX key 7200 value (7200秒 = 2小时,与last_active保持一致) + _, err := redisClient.Do(ctx, "SETEX", key, 7200, sessionId) + return err +} + +// GetSessionCache 获取缓存的 RAGFlow Session ID(租户+用户+方向隔离) +func GetSessionCache(ctx context.Context, tenantId, userId, chatId string) (string, error) { + key := SessionLastActiveKeyPrefix + tenantId + ":" + userId + ":" + chatId + ":session_id" result, err := redisClient.Get(ctx, key) if err != nil { return "", err @@ -448,9 +448,9 @@ func GetSessionCache(ctx context.Context, userId string) (string, error) { return result.String(), nil } -// DelSessionCache 删除缓存的 RAGFlow Session ID(归档时调用) -func DelSessionCache(ctx context.Context, userId string) error { - key := SessionLastActiveKeyPrefix + userId + ":session_id" +// DelSessionCache 删除缓存的 RAGFlow Session ID(归档时调用,租户+用户+方向隔离) +func DelSessionCache(ctx context.Context, tenantId, userId, chatId string) error { + key := SessionLastActiveKeyPrefix + tenantId + ":" + userId + ":" + chatId + ":session_id" _, err := redisClient.Del(ctx, key) return err }