|
|
|
@ -194,7 +194,7 @@ public class RedissonRateLimiter extends RedissonExpirable implements RRateLimit
|
|
|
|
|
+ "local expiredValues = redis.call('zrangebyscore', permitsName, 0, tonumber(ARGV[2]) - interval); "
|
|
|
|
|
+ "local released = 0; "
|
|
|
|
|
+ "for i, v in ipairs(expiredValues) do "
|
|
|
|
|
+ "local random, permits = struct.unpack('Lc0I', v);"
|
|
|
|
|
+ "local random, permits = struct.unpack('Bc0I', v);"
|
|
|
|
|
+ "released = released + permits;"
|
|
|
|
|
+ "end; "
|
|
|
|
|
|
|
|
|
@ -212,13 +212,13 @@ public class RedissonRateLimiter extends RedissonExpirable implements RRateLimit
|
|
|
|
|
+ "local firstValue = redis.call('zrange', permitsName, 0, 0, 'withscores'); "
|
|
|
|
|
+ "return 3 + interval - (tonumber(ARGV[2]) - tonumber(firstValue[2]));"
|
|
|
|
|
+ "else "
|
|
|
|
|
+ "redis.call('zadd', permitsName, ARGV[2], struct.pack('Lc0I', string.len(ARGV[3]), ARGV[3], ARGV[1])); "
|
|
|
|
|
+ "redis.call('zadd', permitsName, ARGV[2], struct.pack('Bc0I', string.len(ARGV[3]), ARGV[3], ARGV[1])); "
|
|
|
|
|
+ "redis.call('decrby', valueName, ARGV[1]); "
|
|
|
|
|
+ "return nil; "
|
|
|
|
|
+ "end; "
|
|
|
|
|
+ "else "
|
|
|
|
|
+ "redis.call('set', valueName, rate); "
|
|
|
|
|
+ "redis.call('zadd', permitsName, ARGV[2], struct.pack('Lc0I', string.len(ARGV[3]), ARGV[3], ARGV[1])); "
|
|
|
|
|
+ "redis.call('zadd', permitsName, ARGV[2], struct.pack('Bc0I', string.len(ARGV[3]), ARGV[3], ARGV[1])); "
|
|
|
|
|
+ "redis.call('decrby', valueName, ARGV[1]); "
|
|
|
|
|
+ "return nil; "
|
|
|
|
|
+ "end;",
|
|
|
|
@ -312,7 +312,7 @@ public class RedissonRateLimiter extends RedissonExpirable implements RRateLimit
|
|
|
|
|
+ "local expiredValues = redis.call('zrangebyscore', permitsName, 0, tonumber(ARGV[1]) - interval); "
|
|
|
|
|
+ "local released = 0; "
|
|
|
|
|
+ "for i, v in ipairs(expiredValues) do "
|
|
|
|
|
+ "local random, permits = struct.unpack('Lc0I', v);"
|
|
|
|
|
+ "local random, permits = struct.unpack('Bc0I', v);"
|
|
|
|
|
+ "released = released + permits;"
|
|
|
|
|
+ "end; "
|
|
|
|
|
|
|
|
|
|