diff --git a/backend/internal/repository/session_limit_cache.go b/backend/internal/repository/session_limit_cache.go index 3dc89f87..3d57b152 100644 --- a/backend/internal/repository/session_limit_cache.go +++ b/backend/internal/repository/session_limit_cache.go @@ -3,6 +3,7 @@ package repository import ( "context" "fmt" + "log" "strconv" "time" @@ -153,6 +154,21 @@ func NewSessionLimitCache(rdb *redis.Client, defaultIdleTimeoutMinutes int) serv if defaultIdleTimeoutMinutes <= 0 { defaultIdleTimeoutMinutes = 5 // 默认 5 分钟 } + + // 预加载 Lua 脚本到 Redis,避免 Pipeline 中出现 NOSCRIPT 错误 + ctx := context.Background() + scripts := []*redis.Script{ + registerSessionScript, + refreshSessionScript, + getActiveSessionCountScript, + isSessionActiveScript, + } + for _, script := range scripts { + if err := script.Load(ctx, rdb).Err(); err != nil { + log.Printf("[SessionLimitCache] Failed to preload Lua script: %v", err) + } + } + return &sessionLimitCache{ rdb: rdb, defaultIdleTimeout: time.Duration(defaultIdleTimeoutMinutes) * time.Minute,