https://github.com/michielvdvelde/redis-streams-manager
Easy and simple stream manager for Redis
https://github.com/michielvdvelde/redis-streams-manager
ioredis redis streams
Last synced: 7 months ago
JSON representation
Easy and simple stream manager for Redis
- Host: GitHub
- URL: https://github.com/michielvdvelde/redis-streams-manager
- Owner: MichielvdVelde
- License: mit
- Created: 2020-03-03T23:11:43.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-01-11T14:46:57.000Z (almost 4 years ago)
- Last Synced: 2025-03-17T20:21:26.747Z (7 months ago)
- Topics: ioredis, redis, streams
- Language: TypeScript
- Homepage: https://github.com/MichielvdVelde/redis-streams-manager
- Size: 59.6 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# redis-streams-manager
Easy Redis Streams manager. The manager handles the consumption of multiple
Streams, and emits new entries by stream name.- Is an `EventEmitter` which emits stream entries by stream name
- Patches the emitter methods (`on`, `off`, etc) to automatically start and stop
consumption
- Ability to add streams starting from an id, instead of the default `$`Extracted from a personal project in which I required an easy way to work with
multiple streams.[ioredis](https://github.com/luin/ioredis) is marked as a peer dependency,
you'll need to install it yourself.The code was heavily inspired by
[BullMQ](https://github.com/taskforcesh/bullmq/blob/master/src/classes/queue-events.ts).## Install
```
npm i redis-streams-manager
```## Example
Small and confusing example. See the source code for more information.
```ts
import IORedis from "ioredis";
import StreamsManager, { StreamListener } from "redis-streams-manager";const blockingClient = new IORedis();
// manager uses blocking commands,
// so it needs a dedicated Redis connection!
const streams = new StreamsManager(blockingClient, {
blockingTimeout: 10000, // defaults to 10000ms (10s)
count: 5, // max entries per stream, optional, default not set
});// define a listener
const listener: StreamListener = (data, id, name) => {
// `data` is a key-value object
// `id` is the stream message id
// `name` is the stream name
};// consumption will start automatically
// when using `on` and not started yet
streams.on("myStream", listener);// consumption will stop automatically
// when using `removeListener` and no remaining listeners
streams.removeListener("myStream", listener);// manually add one or more streams
// if `id` is omitted, defaults to `$`
streams.add("myStream", { key: "myStream", id: "$" });// manually remove one or more streams
streams.remove("myStream");
```## License
Copyright 2020-2022 Michiel van der Velde.
This software is licensed under [the MIT License](LICENSE).