Browse Source

refactor: Update rate limit configuration to use dynamic expiration duration

[email protected] 10 months ago
parent
commit
4084b18071
1 changed files with 4 additions and 3 deletions
  1. 4 3
      middleware/model-rate-limit.go

+ 4 - 3
middleware/model-rate-limit.go

@@ -51,7 +51,7 @@ func checkRedisRateLimit(ctx context.Context, rdb *redis.Client, key string, max
 	// 如果在时间窗口内已达到限制,拒绝请求
 	subTime := nowTime.Sub(oldTime).Seconds()
 	if int64(subTime) < duration {
-		rdb.Expire(ctx, key, common.RateLimitKeyExpirationDuration)
+		rdb.Expire(ctx, key, time.Duration(setting.ModelRequestRateLimitDurationMinutes)*time.Minute)
 		return false, nil
 	}
 
@@ -68,7 +68,7 @@ func recordRedisRequest(ctx context.Context, rdb *redis.Client, key string, maxC
 	now := time.Now().Format(timeFormat)
 	rdb.LPush(ctx, key, now)
 	rdb.LTrim(ctx, key, 0, int64(maxCount-1))
-	rdb.Expire(ctx, key, common.RateLimitKeyExpirationDuration)
+	rdb.Expire(ctx, key, time.Duration(setting.ModelRequestRateLimitDurationMinutes)*time.Minute)
 }
 
 // Redis限流处理器
@@ -118,7 +118,7 @@ func redisRateLimitHandler(duration int64, totalMaxCount, successMaxCount int) g
 
 // 内存限流处理器
 func memoryRateLimitHandler(duration int64, totalMaxCount, successMaxCount int) gin.HandlerFunc {
-	inMemoryRateLimiter.Init(common.RateLimitKeyExpirationDuration)
+	inMemoryRateLimiter.Init(time.Duration(setting.ModelRequestRateLimitDurationMinutes) * time.Minute)
 
 	return func(c *gin.Context) {
 		userId := strconv.Itoa(c.GetInt("id"))
@@ -161,6 +161,7 @@ func ModelRequestRateLimit() func(c *gin.Context) {
 	// 计算限流参数
 	duration := int64(setting.ModelRequestRateLimitDurationMinutes * 60)
 	totalMaxCount := setting.ModelRequestRateLimitCount
+
 	successMaxCount := setting.ModelRequestRateLimitSuccessCount
 
 	// 根据存储类型选择限流处理器