2.0.1 • Published 1 year ago

counter-sliding-window v2.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

counter-sliding-window

Build Status NPM Version

Sliding window counter with in-memory counter implementation and distributed counter implementation using Redis streams. Supports bucketing counts by seconds, minutes and hours.

Installation

npm install counter-sliding-window

Local

Local implementation maintains a sliding window counter in memory

Usage

import { SlidingWindowCounterLocal } from 'counter-sliding-window';

const sliding = new SlidingWindowCounterLocal(5, 'seconds');
// [Time 0]
sliding.add(1);
// After 3 seconds [Time 3]
sliding.add(2);

// After 1 more second [Time 4]
console.log(sliding.get()); // prints 3

// After 3 more seconds [Time 7]
console.log(sliding.get()); // prints 2

// After 2 more seconds [Time 9]
console.log(sliding.get()); // prints 0

Redis

The Redis implementation of the sliding window counter is suitable for counters in a distributed environment, for scenarios such as rate limiting.

The implementation is based on Redis Streams and requires Redis version 6.2.0 and above.

Usage

import { SlidingWindowCounterRedis } from 'counter-sliding-window';
import Redis from 'ioredis';

const redisClient = new Redis(6379, "localhost")
const sliding = new SlidingWindowCounterRedis('counter-key-name', 5, 'seconds', redisClient);
// [Time 0]
await sliding.add(1);
// After 3 seconds [Time 3]
await sliding.add(2);

// After 1 more second [Time 4]
console.log(await sliding.get()); // prints 3

// After 3 more seconds [Time 7]
console.log(await sliding.get()); // prints 2

// After 2 more seconds [Time 9]
console.log(await sliding.get()); // prints 0