scalable-rate-limiter
v1.0.9
Published
A rate limiter that uses redis to horizontally scale across servers. It allows a user to set the number of tokens per user per timeframe. What separates this package from the rest is it is race-condition safe since it uses a LUA script for atomic funcs
Downloads
11
Readme
Scalable Rate Limiter
A professional quality rate limiter that horizontally scales with Redis and eliminates race conditions
Prerequisites
Redis needs to be required in and setup to use the correct host and credentials. https://www.npmjs.com/package/redis
npm install redis
Installing
To install the library from NPM:
npm install scalable-rate-limiter
To instantiate the rate limiter and call it for API requests
/*
* @param {Object} redis The preconfigured redis connection
* @param {Boolean} enableLogging Set this to enable logging
* @param {Integer} allowedReqsPerInterval The number of allowed tokens a user can use (API requests) in time period
* @param {Integer} intervalThreshold The interval threshold to wait before
* @param {String} rateLimiterNameSpace redis namespace of the rate limiter: default: '.rate.limiter'
* @param {Integer} allowedReqsPerDay The number of allowed requests a user can make in one day
* @param {Integer} dailyTTL How long to store daily quota usage in redis
* @param {String} timezone Timezone for daily tally
*/
let redis = require("redis"),
redisClient = redis.createClient(),
limiter = new RateLimiter(redisClient, false, 5, 3, '.rate.limiter');
To use the rate limiter:
// To call the rate limiter on a userID for API requests
limiter.rateLimitFunction(userID, (limited) => {
if(!limited){
// Make API call request for the user here
apiCall()
}
})
Contributing
This is licensed under MIT. Please feel free to make pull requests for main features under this license.
Wish list:
1) Allow the rate limiter to have multiple limits or thresholds
2) Use options object to simulate named parameters
Authors
License
This project is licensed under the MIT License - see the LICENSE.md file for details
Acknowledgments
- willyschu for implementing the LUA rate limiter