mirror of
https://github.com/lingble/safe-redis-leader.git
synced 2025-10-29 11:42:34 +00:00
49 lines
1.8 KiB
Markdown
49 lines
1.8 KiB
Markdown
# Safe Redis Leader
|
|
|
|
Fork of: [Safe Redis Leader](https://www.npmjs.com/package/safe-redis-leader)
|
|
|
|
1. Built with typescript
|
|
2. New tests running with Jest and testing multiple instances at the same time to make sure there is only 1 leader at all time
|
|
3. New event (main reason of this fork)
|
|
- After an election, all the instances will send an event either ```elected``` or ```notElected```
|
|
|
|
## Goal
|
|
|
|
The Safe Redis Leader TS module is designed to provide a leader election implementation that provides tested gaurentees that there is only a single leader elected from a group of clients at one time.
|
|
|
|
The implementation is a port of the stale [Redis Leader npm package](https://github.com/pierreinglebert/redis-leader) that implements a solution to the [known race condition](https://github.com/pierreinglebert/redis-leader/blob/c3b4db5df9802908728ad0ae4310a52e74acb462/index.js#L81). Additionally, this rewritten package:
|
|
|
|
1. Only exposes public api functions that should be exposed (no more public-but-should-be-private `_elect` fn)
|
|
2. has a test suite within docker-compose using a real redis instance, which allows anyone to run the tests with no heavy dependency setup
|
|
3. Replace callback-hell with async/await
|
|
|
|
## Usage
|
|
|
|
Install the package:
|
|
|
|
```bash
|
|
npm install ts-safe-redis-leader
|
|
```
|
|
|
|
Exemple:
|
|
```typescript
|
|
import * as Redis from "ioredis";
|
|
import { SafeRedisLeader } from "../src";
|
|
|
|
const redisConfig: Redis.RedisOptions = {
|
|
port: 6379,
|
|
host: "localhost",
|
|
autoResubscribe: false,
|
|
lazyConnect: true,
|
|
maxRetriesPerRequest: 0,
|
|
};
|
|
const redisClient = new Redis(redisConfig);
|
|
|
|
const leaderElectionKey = 'the-election';
|
|
const safeLeader = new SafeRedisLeader(redisClients[i], 1500, 3000, leaderElectionKey);
|
|
|
|
await safeLeader.elect();
|
|
```
|
|
|
|
# License
|
|
MIT |