diff --git a/redisson/src/main/java/org/redisson/RedissonRateLimiter.java b/redisson/src/main/java/org/redisson/RedissonRateLimiter.java index e9bf767e8..6a53029a1 100644 --- a/redisson/src/main/java/org/redisson/RedissonRateLimiter.java +++ b/redisson/src/main/java/org/redisson/RedissonRateLimiter.java @@ -206,7 +206,11 @@ public class RedissonRateLimiter extends RedissonExpirable implements RRateLimit + "if released > 0 then " + "redis.call('zremrangebyscore', permitsName, 0, tonumber(ARGV[2]) - interval); " - + "currentValue = tonumber(currentValue) + released; " + + "if tonumber(currentValue) + released > tonumber(rate) then " + + "currentValue = tonumber(rate) - redis.call('zcard', permitsName); " + + "else " + + "currentValue = tonumber(currentValue) + released; " + + "end; " + "redis.call('set', valueName, currentValue);" + "end;"