From 7c103a1d1d258efcc2f9cd2fa0fdcd964ce879ff Mon Sep 17 00:00:00 2001 From: Cold <16419454+cold502@user.noreply.gitee.com> Date: Sat, 20 Dec 2025 14:50:41 +0800 Subject: [PATCH] =?UTF-8?q?redis=20=E7=BC=93=E5=AD=98=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- redis/redis.go | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) 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 }