Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ryosukecla/node-distributed-debounce
debounce function for distributed system with redis and nodejs.
https://github.com/ryosukecla/node-distributed-debounce
debounce distributed-systems nodejs redis
Last synced: 3 days ago
JSON representation
debounce function for distributed system with redis and nodejs.
- Host: GitHub
- URL: https://github.com/ryosukecla/node-distributed-debounce
- Owner: RyosukeCla
- License: mit
- Created: 2020-12-22T11:14:07.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-11-13T07:56:43.000Z (about 3 years ago)
- Last Synced: 2024-11-11T01:49:09.402Z (5 days ago)
- Topics: debounce, distributed-systems, nodejs, redis
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/node-distributed-debounce
- Size: 38.1 KB
- Stars: 16
- Watchers: 1
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# node-dsitributed-debounce
debounce function for distributed system with redis and nodejs.
## Installation
```sh
$ npm i -S node-distributed-debounce
```and install redis
```sh
$ npm i -S redis
$ npm i -D @types/redis
```## Usage
example:
```ts
import { distributedDebounce } from 'node-distributed-debounce';
// const { distributedDebounce } = require('node-distributed-debounce');
import redis from 'redis';const redisclient = redis.createClient();
function debouncedCall(index: number) {
distributedDebounce(() => {
console.log('called', index);
}, {
wait: 5, // sec
key: 'dist:debounce:call', // key for debounce
redisclient,
}).catch(e => console.error(e));
}const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
function main() {
for (let i = 0; i < 10; i++) {
debouncedCall(i);
await wait(100);
}
}```
output:
```
called 9
```## QA
- Q: Does it work with redis cluster?
- A: Yes.## Algorithm
```
FUNCTION DISTRIBUTED_DEBOUNCE(key, wait, callback)ticket = MULTI
INCR(key)
EXPRE(key, wait)
EXECSLEEP(wait)
currentTicket = GET(key)
IF currentTicket != ticket
EXIT
ENDIF SET(key_lock, '', NX, PX, 100) != OK
EXIT
ENDcallback()
```