Skip to content

Commit

Permalink
use ioredis by default and add useRedisPackage option
Browse files Browse the repository at this point in the history
  • Loading branch information
animir committed Aug 29, 2023
1 parent c71a7cc commit d4e26c0
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 56 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,8 @@ Specific:
* [indexKeyPrefix](https://github.com/animir/node-rate-limiter-flexible/wiki/Options#indexkeyprefix) Combined indexes of MongoDB.
* [timeoutMs](https://github.com/animir/node-rate-limiter-flexible/wiki/Options#timeoutms) For Cluster.
* [rejectIfRedisNotReady](https://github.com/animir/node-rate-limiter-flexible/wiki/Options#rejectifredisnotready)
* [useRedisPackage](https://github.com/animir/node-rate-limiter-flexible/wiki/Options#useredispackage)
* [useRedis3AndLowerPackage](https://github.com/animir/node-rate-limiter-flexible/wiki/Options#useredis3andlowerpackage)

## API

Expand Down
12 changes: 6 additions & 6 deletions lib/RateLimiterRedis.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class RateLimiterRedis extends RateLimiterStoreAbstract {

this._rejectIfRedisNotReady = !!opts.rejectIfRedisNotReady;

this.useIoredis = opts.useIoredis;
this.useRedisPackage = opts.useRedisPackage;
this.useRedis3AndLowerPackage = opts.useRedis3AndLowerPackage;
if (typeof this.client.defineCommand === 'function') {
this.client.defineCommand("rlflxIncr", {
Expand Down Expand Up @@ -87,7 +87,7 @@ class RateLimiterRedis extends RateLimiterStoreAbstract {

if (forceExpire) {
if (secDuration > 0) {
if(this.useIoredis){
if(!this.useRedisPackage && !this.useRedis3AndLowerPackage){
multi.set(rlKey, points, "EX", secDuration);
}else{
multi.set(rlKey, points, { EX: secDuration });
Expand All @@ -96,14 +96,14 @@ class RateLimiterRedis extends RateLimiterStoreAbstract {
multi.set(rlKey, points);
}

if(this.useIoredis){
if(!this.useRedisPackage && !this.useRedis3AndLowerPackage){
return multi.pttl(rlKey).exec(true);
}
return multi.pTTL(rlKey).exec(true);
}

if (secDuration > 0) {
if(this.useIoredis){
if(!this.useRedisPackage && !this.useRedis3AndLowerPackage){
return this.client.rlflxIncr(
[rlKey].concat([String(points), String(secDuration)]));
}
Expand All @@ -130,7 +130,7 @@ class RateLimiterRedis extends RateLimiterStoreAbstract {
});
}
} else {
if(this.useIoredis){
if(!this.useRedisPackage && !this.useRedis3AndLowerPackage){
return multi.incrby(rlKey, points).pttl(rlKey).exec(true);
}

Expand All @@ -142,7 +142,7 @@ class RateLimiterRedis extends RateLimiterStoreAbstract {
if (!this._isRedisReady()) {
throw new Error('Redis connection is not ready');
}
if(this.useIoredis){
if(!this.useRedisPackage && !this.useRedis3AndLowerPackage){
return this.client
.multi()
.get(rlKey)
Expand Down
2 changes: 1 addition & 1 deletion lib/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ interface IRateLimiterMongoOptions extends IRateLimiterStoreOptions {

interface IRateLimiterRedisOptions extends IRateLimiterStoreOptions {
rejectIfRedisNotReady?: boolean;
useIoredis?: boolean;
useRedisPackage?: boolean;
useRedis3AndLowerPackage?: boolean;
}

Expand Down
4 changes: 0 additions & 4 deletions test/BurstyRateLimiter.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,12 @@ describe('BurstyRateLimiter', () => {
await redisClientClosed.disconnect();
const rlRedisClosed = new RateLimiterRedis({
storeClient: redisClientClosed,
useIoredis: true,
});
const blRedis = new RateLimiterRedis({
storeClient: redisMockClient,
keyPrefix: 'bursty',
points: 1,
duration: 1,
useIoredis: true,
});
const bursty = new BurstyRateLimiter(rlRedisClosed, blRedis);

Expand Down Expand Up @@ -124,12 +122,10 @@ describe('BurstyRateLimiter', () => {
storeClient: redisMockClient,
points: 1,
duration: 1,
useIoredis: true,
});
const blRedisClosed = new RateLimiterRedis({
storeClient: redisClientClosed,
keyPrefix: 'bursty',
useIoredis: true,
});
const bursty = new BurstyRateLimiter(rlRedis, blRedisClosed);
await bursty.consume(testKey);
Expand Down
45 changes: 5 additions & 40 deletions test/RateLimiterRedis.ioredis.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 2,
duration: 5,
useIoredis: true,
});
rateLimiter
.consume(testKey)
Expand All @@ -47,7 +46,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 1,
duration: 5,
useIoredis: true,
});
rateLimiter
.consume(testKey, 2)
Expand All @@ -65,7 +63,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 2,
duration: 5,
execEvenly: true,
useIoredis: true,
});
rateLimiter
.consume(testKey)
Expand Down Expand Up @@ -102,7 +99,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
duration: 1,
execEvenly: true,
execEvenlyMinDelayMs: 20,
useIoredis: true,
});
rateLimiter
.consume(testKey)
Expand All @@ -129,7 +125,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 3,
duration: 5,
useIoredis: true
});
rateLimiter
.consume(testKey)
Expand Down Expand Up @@ -157,7 +152,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 1,
duration: 5,
useIoredis: true
});
rateLimiter
.consume(testKey)
Expand Down Expand Up @@ -187,7 +181,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
duration: 5,
inMemoryBlockOnConsumed: 2,
inMemoryBlockDuration: 10,
useIoredis: true
});
rateLimiter
.consume(testKey)
Expand All @@ -213,7 +206,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 1,
duration: 5,
inMemoryBlockOnConsumed: 1,
useIoredis: true
});
rateLimiter
.consume(testKey)
Expand All @@ -233,7 +225,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 1,
duration: 5,
inMemoryBlockOnConsumed: 1,
useIoredis: true
});
rateLimiter
.consume(testKey, 2)
Expand All @@ -254,7 +245,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
duration: 1,
inMemoryBlockOnConsumed: 2,
inMemoryBlockDuration: 2,
useIoredis: true
});
// It blocks on the first consume as consumed points more than available
rateLimiter
Expand All @@ -281,7 +271,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
const rateLimiter = new RateLimiterRedis({
storeClient: redisMockClient,
inMemoryBlockDuration: 2,
useIoredis: true
});
rateLimiter.reward('test');
} catch (err) {
Expand Down Expand Up @@ -309,7 +298,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {

const rateLimiter = new RateLimiterRedis({
storeClient: redisMockClient,
useIoredis: true
});

await redisMockClient.disconnect();
Expand All @@ -335,9 +323,7 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 2,
duration: 2,
storeClient: redisMockClient,
useIoredis: true
}),
useIoredis: true
});
await redisClientClosed.disconnect();

Expand All @@ -362,9 +348,7 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 2,
duration: 2,
storeClient: redisMockClient,
useIoredis: true
}),
useIoredis: true
});
await redisClientClosed.disconnect();

Expand All @@ -388,9 +372,7 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 2,
duration: 2,
storeClient: redisMockClient,
useIoredis: true
}),
useIoredis: true
});
await redisClientClosed.disconnect();

Expand Down Expand Up @@ -420,9 +402,7 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 1,
duration: 1,
storeClient: redisMockClient,
useIoredis: true
}),
useIoredis: true
});
await redisClientClosed.disconnect();

Expand All @@ -436,7 +416,7 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
it('use keyPrefix from options', () => {
const testKey = 'key';
const keyPrefix = 'test';
const rateLimiter = new RateLimiterRedis({ keyPrefix, storeClient: redisMockClient, useIoredis: true });
const rateLimiter = new RateLimiterRedis({ keyPrefix, storeClient: redisMockClient });

expect(rateLimiter.getKey(testKey)).to.equal('test:key');
});
Expand All @@ -448,7 +428,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 1,
duration: 1,
blockDuration: 2,
useIoredis: true
});
rateLimiter
.consume(testKey, 2)
Expand All @@ -468,7 +447,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 1,
duration: 1,
blockDuration: 2,
useIoredis: true
});
sinon.stub(rateLimiter, '_block').callsFake(() => Promise.reject(new Error()));
rateLimiter
Expand All @@ -489,7 +467,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 1,
duration: 1,
blockDuration: 2,
useIoredis: true
});
rateLimiter
.consume(testKey, 2)
Expand Down Expand Up @@ -517,7 +494,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 1,
duration: 1,
useIoredis: true
});
rateLimiter.block(testKey, 2).then(() => {
rateLimiter
Expand All @@ -539,7 +515,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 2,
duration: 1,
useIoredis: true
});
rateLimiter
.consume(testKey)
Expand Down Expand Up @@ -567,7 +542,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 2,
duration: 1,
useIoredis: true
});
await redisMockClient.disconnect()
await rateLimiter
Expand Down Expand Up @@ -628,7 +602,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 2,
duration: 1,
useIoredis: true
});
rateLimiter
.get(testKey)
Expand All @@ -648,7 +621,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 2,
duration: 1,
useIoredis: true
});
rateLimiter
.consume(testKey)
Expand All @@ -668,7 +640,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 2,
duration: 1,
useIoredis: true
});
rateLimiter.delete(testKey)
.then((resDel) => {
Expand All @@ -684,7 +655,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 2,
duration: 1,
useIoredis: true
});
await redisMockClient.disconnect();
await rateLimiter.delete(testKey)
Expand All @@ -698,7 +668,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 2,
duration: 5,
useIoredis: true
});
rateLimiter
.consume(testKey, 1, { customDuration: 1 })
Expand All @@ -717,7 +686,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
storeClient: redisMockClient,
points: 2,
duration: 5,
useIoredis: true
});
rateLimiter
.consume(testKey, 1, { customDuration: 1 })
Expand All @@ -743,9 +711,7 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
points: 2,
duration: 3,
storeClient: redisMockClient,
useIoredis: true
}),
useIoredis: true
});
await redisClientClosed.disconnect();

Expand All @@ -766,7 +732,6 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {
blockDuration: 10,
inMemoryBlockOnConsumed: 2,
inMemoryBlockDuration: 10,
useIoredis: true
});
rateLimiter
.consume(testKey)
Expand All @@ -791,7 +756,7 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {

it('does not expire key if duration set to 0', (done) => {
const testKey = 'neverexpire';
const rateLimiter = new RateLimiterRedis({ storeClient: redisMockClient, points: 2, duration: 0, useIoredis: true });
const rateLimiter = new RateLimiterRedis({ storeClient: redisMockClient, points: 2, duration: 0 });
rateLimiter.consume(testKey, 1)
.then(() => {
rateLimiter.consume(testKey, 1)
Expand All @@ -814,7 +779,7 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {

it('block key forever, if secDuration is 0', (done) => {
const testKey = 'neverexpire';
const rateLimiter = new RateLimiterRedis({ storeClient: redisMockClient, points: 1, duration: 1, useIoredis: true });
const rateLimiter = new RateLimiterRedis({ storeClient: redisMockClient, points: 1, duration: 1 });
rateLimiter.block(testKey, 0)
.then(() => {
setTimeout(() => {
Expand All @@ -833,7 +798,7 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {

it('set points by key', (done) => {
const testKey = 'set';
const rateLimiter = new RateLimiterRedis({ storeClient: redisMockClient, points: 1, duration: 1, useIoredis: true });
const rateLimiter = new RateLimiterRedis({ storeClient: redisMockClient, points: 1, duration: 1 });
rateLimiter.set(testKey, 12)
.then(() => {
rateLimiter.get(testKey)
Expand All @@ -849,7 +814,7 @@ describe('RateLimiterRedis with fixed window', function RateLimiterRedisTest() {

it('set points by key forever', (done) => {
const testKey = 'setforever';
const rateLimiter = new RateLimiterRedis({ storeClient: redisMockClient, points: 1, duration: 1, useIoredis: true });
const rateLimiter = new RateLimiterRedis({ storeClient: redisMockClient, points: 1, duration: 1 });
rateLimiter.set(testKey, 12, 0)
.then(() => {
setTimeout(() => {
Expand Down
Loading

0 comments on commit d4e26c0

Please sign in to comment.