redis-limiter

1.0.6 • Public • Published

RedisLimiter

A simple and efficient Node.js + redis based rate limiter.

Examples

Express app request limiter

var redis = require('redis');
var client = redis.createClient();
var RedisLimiter = require('redis-limiter');
var limiter = new RedisLimiter({
   client: client,
   prefix: 'lim'
});
 
// 5 requests per second
limiter.add('/api/actionOne', {
   limit: 5,
   interval: 1
});
 
// 7 requests every 10 seconds
limiter.add('/api/actionTwo', {
   limit: 7,
   interval: 10
});
 
app.get('/api/*', function(req, res, next) {
   limiter.limit(req.path, req.ip, function(err, result) {
      if (err || !result) {
         return next();
      }
 
      if (result.exceeded) {
         return res.sendStatus(429);
      }
 
      next();
   });
});
 

API

Constructor(opt): RedisLimiter

opt.client The redis client object.
opt.prefix The key prefix for entries into your redis store (default: 'lim').
opt.limits Initialise all limits with a single object that maps name -> opt. This is an alternative to calling the add method for each limit.

add(name, opt): undefined

Add a single limit object with name name, having interval and limit properties defined within opt.

remove(name): undefined

Remove a limit object.

hasLimit(name): Boolean

Test if a limit object exists.

limit(name, user, cb): undefined

Increment a particular user's usage count for a limit object on the current interval. If the current interval does not exist or has expired, a new one is created.

The callback function receives an error object and a result object as arguments. The result object will contain the fields: exceeded:Boolean and count:Number indicating whether or not the action's limit was exceeded and the count for the current interval respectively.

Package Sidebar

Install

npm i redis-limiter

Weekly Downloads

3

Version

1.0.6

License

MIT

Last publish

Collaborators

  • tully