0.1.6 • Published 10 years ago
redis-limit v0.1.6
redis-limit
Description
A simple redis backed rate limiter. This is based on this implementation and redis-rate-limiter.
The bucket is constantly being refilled with tokens. This means that setting an interval of 1000 milliseconds and a maxInInterval of 10 requests will fill tokens at a rate of 10 tokens per second (1 token every 0.1 seconds). Therefore if a bucket is full 10 requests could be made immediately then 1 more request every 0.1 seconds, so it's possible to make more than 10 requests in any second if tokens are saved up. Instead using a maxInInterval of 1 and interval of 100 milliseconds will prevent there from ever being more than 10 requests per second, but requests will have to be 100 milliseconds apart.
Installation
npm install redis-limitUsage
var redis = require("redis");
var RateLimiter = require("redis-limit");
var limiter = RateLimiter({
redis: redis.createClient(),
interval: 1000, // milliseconds
maxInInterval: 10,
minDifference: 10, // requests have to be 10 milliseconds apart
namespace: "redis-limit"
});
limiter("key", function(err, result) {
// result is the time in milliseconds until a request is allowed
// 0 if there are tokens in the bucket now
console.log(result);
});Options
redis- a redis clientinterval- the time in milliseconds to completely fill the bucketmaxInInterval- the capacity of the bucket. see the note above about why this isn't truly the maximum requests allowed in any intervalminDifference- minimum time between requests. requests made when there are no tokens keep the bucket from refilling, requests made less thanminDifferenceapart do not keep the bucket from fillingnamespace- namespace for keys in redis, multiple instaces can share a namespace with no race conditions

