Token bucket like limiter library based on redis storage
Assume you have a API service, and want to limit user request rate like:
- 10,000 requests/day
- 600 requests/1-hour
- 10 requests/10-seconds
You can do this:
let limiter = RedisLimiter::default();
let key = format!("{}:{}", request.endpoint, request.method);
// Once one request has come
if limiter.consume(vec![
(key.as_str(), 10, 10, 1),
(key.as_str(), 3600, 600, 1),
(key.as_str(), 24*3600, 10000, 1)]).is_ok() {
// Process the request
} else {
// Reject the request
}