Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mikesparr/redis-priority-queue
Simple Promise based multi-channel priority queue using Redis sorted set
https://github.com/mikesparr/redis-priority-queue
priority-queue promises redis typescript
Last synced: about 6 hours ago
JSON representation
Simple Promise based multi-channel priority queue using Redis sorted set
- Host: GitHub
- URL: https://github.com/mikesparr/redis-priority-queue
- Owner: mikesparr
- License: mit
- Created: 2018-05-08T16:48:15.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-04-09T23:00:19.000Z (almost 6 years ago)
- Last Synced: 2024-12-21T19:02:31.658Z (20 days ago)
- Topics: priority-queue, promises, redis, typescript
- Language: TypeScript
- Homepage:
- Size: 104 KB
- Stars: 0
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Redis Priority Queue
This is a simple Promise based multi-channel priority queue implementation that leverages Redis sorted set.# Requirements
You will need Redis server running.# Installation
```bash
npm install redis-priority-queue
yarn add redis-priority-queue
```# Test
The test script in `package.json` preprocesses the `.ts` file and then executes.`npm test`
# Usage
The source was written in Typescript, yet it compiles to Javascript (`npm run build`). You can use in ES5 or later supported environments. The following code snippets are implemented in the `__tests__` folder.## Quick start (Node)
```javascript
const queue = require('redis-priority-queue');const config = queue.RedisConfig("localhost", 6379, null, null);
const myQueue = new queue.RedisPriorityQueue(config);
myQueue.length("emptyQueue")
.then(result => {
console.log({result});
})
.catch(error => {
console.error({error});
});
```## Optional with existing client
If you already have a program with a `RedisClient` you can pass the client as an optional second parameter.
```javascript
const myQueue = new queue.RedisPriorityQueue(null, client);myQueue.length("emptyQueue")
.then(result => {
console.log({result});
})
.catch(error => {
console.error({error});
});
```## Typescript
### Initialization
```typescript
import {RedisConfig, IPriorityQueue, RedisPriorityQueue} from 'redis-priority-queue';let config: RedisConfig = new RedisConfig(
"localhost",
6379,
null,
null
);let myQueue : IPriorityQueue = new RedisPriorityQueue(config);
```### Insert element
```typescript
Promise.all([
myQueue.insertWithPriority(testKey, "hello", 1),
myQueue.insertWithPriority(testKey, "world", 2),
myQueue.insertWithPriority(testKey, "foo", 1)
])
.then(values => {
done();
})
.catch(error => {
done.fail(error);
});
```### Pull highest score element
```typescript
myQueue.pullHighestPriority(testKey)
.then(result => {
// assert popped value is highest priority
expect(result).toEqual("world");
})
.catch(error => {
done.fail(error);
});
```### Peek highest score element
```typescript
myQueue.peek(testKey)
.then(result => {
expect(result).toEqual("world");
done();
})
.catch(error => {
done.fail(error);
});
```### Check if empty
```typescript
myQueue.isEmpty(testKey)
.then(result => {
expect(result).toBeFalsy();
done();
})
.catch(error => {
done.fail(error);
});
```### Get queue length
```typescript
myQueue.length(testKey)
.then(result => {
expect(result).toEqual(3);
done();
})
.catch(error => {
done.fail(error);
});
```# Contributing
I haven't thought that far ahead yet. I needed this for my project and wanted to give back. ;-)# License
MIT (if you enhance it, fork and PR so the community benefits)