Skip to content

Instantly share code, notes, and snippets.

@lenconda
Created February 8, 2019 14:09
Show Gist options
  • Save lenconda/8d066e7df3f9d260b1188f1379bf1b2c to your computer and use it in GitHub Desktop.
Save lenconda/8d066e7df3f9d260b1188f1379bf1b2c to your computer and use it in GitHub Desktop.
A queue model based on Redis
const redis = require('redis')
const _db = Symbol('db')
class RedisQueue {
constructor () {
this[_db] = redis.createClient({
host: 'localhost',
port: 6379
})
}
async enqueue (elem) {
return new Promise((resolve, reject) => {
this[_db].rpush('nitro', elem, (err, res) => {
if (err) reject(err.toString())
console.log(`enqueued: ${elem}`)
resolve()
})
})
}
async dequeue () {
return new Promise((resolve, reject) => {
this[_db].blpop('nitro', 0, (err, res) => {
if (err) reject(err.toString())
resolve(res)
})
})
}
quit () {
this[_db].quit()
}
}
// test
async function test () {
const queue = new RedisQueue()
await Promise
.all(Array(10).fill(null).map(
(value, index) => queue.enqueue(
`http://test.com/${index}/${Date.parse(new Date())}`)))
let count = 0
while (count < 5) {
count += 1
let dequeuedItem = await queue.dequeue()
console.log(`dequeued: ${dequeuedItem}`)
}
queue.quit()
}
test()
module.exports = RedisQueue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment