redis-limit

redis backed rate limiter using the token bucket algorithm

Usage no npm install needed!

<script type="module">
  import redisLimit from 'https://cdn.skypack.dev/redis-limit';
</script>

README

redis-limit

Build Status Coverage Status

NPM NPM

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-limit

Usage

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 client
  • interval - the time in milliseconds to completely fill the bucket
  • maxInInterval - the capacity of the bucket. see the note above about why this isn't truly the maximum requests allowed in any interval
  • minDifference - minimum time between requests. requests made when there are no tokens keep the bucket from refilling, requests made less than minDifference apart do not keep the bucket from filling
  • namespace - namespace for keys in redis, multiple instaces can share a namespace with no race conditions