Skip to content

Commit e7715fd

Browse files
authored
Merge pull request #156 from altso/master
Pass current time as a parameter in `RedisTokenBucketManager`
2 parents 0be3a10 + f7b1bab commit e7715fd

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

src/RedisRateLimiting/TokenBucket/RedisTokenBucketManager.cs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,7 @@ internal class RedisTokenBucketManager
1717
local rate = tonumber(@tokens_per_period)
1818
local period = tonumber(@replenish_period)
1919
local requested = tonumber(@permit_count)
20-
21-
-- Even though it is the default since Redis 5, we explicitly enable command replication.
22-
-- This ensures that non-deterministic commands like 'TIME' are replicated by effect.
23-
redis.replicate_commands()
24-
25-
-- Retrieve the current time as unix timestamp with millisecond accuracy.
26-
local time = redis.call('TIME')
27-
local now = math.floor((time[1] * 1000) + (time[2] / 1000))
20+
local now = tonumber(@current_time)
2821
2922
-- Load the current state from Redis. We use MGET to save a round-trip.
3023
local state = redis.call('MGET', @rate_limit_key, @timestamp_key)
@@ -97,6 +90,7 @@ internal async Task<RedisTokenBucketResponse> TryAcquireLeaseAsync()
9790
token_limit = (RedisValue)_options.TokenLimit,
9891
replenish_period = (RedisValue)_options.ReplenishmentPeriod.TotalMilliseconds,
9992
permit_count = (RedisValue)1D,
93+
current_time = (RedisValue)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
10094
});
10195

10296
var result = new RedisTokenBucketResponse();
@@ -125,6 +119,7 @@ internal RedisTokenBucketResponse TryAcquireLease()
125119
token_limit = (RedisValue)_options.TokenLimit,
126120
replenish_period = (RedisValue)_options.ReplenishmentPeriod.TotalMilliseconds,
127121
permit_count = (RedisValue)1D,
122+
current_time = (RedisValue)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
128123
});
129124

130125
var result = new RedisTokenBucketResponse();
@@ -146,4 +141,4 @@ internal class RedisTokenBucketResponse
146141
internal long Count { get; set; }
147142
internal int RetryAfter { get; set; }
148143
}
149-
}
144+
}

0 commit comments

Comments
 (0)