Commit 2a0e1ab9 by tbphp

fix: Redis limit ignoring max eq 0

parent 52d5d495
...@@ -93,25 +93,27 @@ func redisRateLimitHandler(duration int64, totalMaxCount, successMaxCount int) g ...@@ -93,25 +93,27 @@ func redisRateLimitHandler(duration int64, totalMaxCount, successMaxCount int) g
} }
//2.检查总请求数限制并记录总请求(当totalMaxCount为0时会自动跳过,使用令牌桶限流器 //2.检查总请求数限制并记录总请求(当totalMaxCount为0时会自动跳过,使用令牌桶限流器
totalKey := fmt.Sprintf("rateLimit:%s", userId) if totalMaxCount > 0 {
// 初始化 totalKey := fmt.Sprintf("rateLimit:%s", userId)
tb := limiter.New(ctx, rdb) // 初始化
allowed, err = tb.Allow( tb := limiter.New(ctx, rdb)
ctx, allowed, err = tb.Allow(
totalKey, ctx,
limiter.WithCapacity(int64(totalMaxCount)*duration), totalKey,
limiter.WithRate(int64(totalMaxCount)), limiter.WithCapacity(int64(totalMaxCount)*duration),
limiter.WithRequested(duration), limiter.WithRate(int64(totalMaxCount)),
) limiter.WithRequested(duration),
)
if err != nil {
fmt.Println("检查总请求数限制失败:", err.Error()) if err != nil {
abortWithOpenAiMessage(c, http.StatusInternalServerError, "rate_limit_check_failed") fmt.Println("检查总请求数限制失败:", err.Error())
return abortWithOpenAiMessage(c, http.StatusInternalServerError, "rate_limit_check_failed")
} return
}
if !allowed {
abortWithOpenAiMessage(c, http.StatusTooManyRequests, fmt.Sprintf("您已达到总请求数限制:%d分钟内最多请求%d次,包括失败次数,请检查您的请求是否正确", setting.ModelRequestRateLimitDurationMinutes, totalMaxCount)) if !allowed {
abortWithOpenAiMessage(c, http.StatusTooManyRequests, fmt.Sprintf("您已达到总请求数限制:%d分钟内最多请求%d次,包括失败次数,请检查您的请求是否正确", setting.ModelRequestRateLimitDurationMinutes, totalMaxCount))
}
} }
// 4. 处理请求 // 4. 处理请求
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment