写了个用 redis 做消息(任务)队列的包——redis-as-queue
发布在Node.js之撸2014年11月5日view:4263
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

较之于其它包有一个功能点不一样,就是分 Normal QueueUnique Queue。*Normal Queue* 就是一个普通的先进先出队列,而 Unique Queue 就是一个唯一的队列,当我们往 Unique Queue 中插入一个已有的消息时,你可以自主选择是更新这个消息到队尾还是不做任何事情。

包名叫 redis-as-queue,仓库地址在:https://github.com/XadillaX/node-redis-as-queue,求 star,求 follow。

所以安装只需要:

$ npm install redis-as-queue

最后为了凑字数帖上流氓的 README:


Usage

There are two kinds of queue - normal queue and unique queue.

Each value in unique queue is unique. If a new value that equals any value in the queue, you may choose to update or not.

First you should require this package:

var raq = require("redis-as-queue");

Normal Queue

Create

var normalQueue = new raq.NormalQueue(QUEUE_NAME, [...]);

Note: [...] is the option(s) to connect redis server. Refer to node-redis document.

Eg.

javascript new raq.NormalQueue(QUEUE_NAME, 6379, '127.0.0.1', {}); new raq.NormalQueue(QUEUE_NAME, unix_socket, options); ...

Push

To push a message to your queue, you may use this function:

normalQueue.push("YOUR MESSAGE", function(err) {
    console.log(err);
});

Get

To get message(s) from your redis queue, you may use get function.

Get earlist one message
normalQueue.get(function(err, messages) {
    console.log(err);
    if(messages.length) console.log(messages[0]);
});
Get earlist N message(s)
// This call gets 10 earlist messages
normalQueue.get(10, function(err, messages) {
    console.log(err);
    for(var i = 0; i < messages.length; i++) console.log(messages[i]);
});
Get all message(s)
normalQueue.get(-1, function(err, messages) {
    console.log(err);
    for(var i = 0; i < messages.length; i++) console.log(messages[i]);
});

Remove

To remove message(s) from your redis queue, you may use removeAmount function.

Remove earlist one message
normalQueue.removeAmount(function(err) {
    console.log(err);
});
Remove earlist N message(s)
normalQueue.removeAmount(5, function(err) {
    console.log(err);
});
Remove all the message(s)
normalQueue.removeAmount(-1, function(err) {
    console.log(err);
});

Length

Get the length of current queue.

normalQueue.length(function(err, len) {
    console.log(len);
});

Unique Queue

Each message in unique queue is unique.

Create

var uniqueQueue = new raq.UniqueQueue(QUEUE_NAME, [...]);

Note: [...] is the option(s) to connect redis server. Refer to node-redis document.

Eg.

javascript new raq.UniqueQueue(QUEUE_NAME, 6379, '127.0.0.1', {}); new raq.UniqueQueue(QUEUE_NAME, unix_socket, options); ...

Push

Push a message to the queue.

Need update

This call will check if your message is existing. If existing, it will move the previous message to the end of queue. Otherwise, your message will be pushed at the end of queue.

uniqueQueue.push("YOUR_MESSAGE", true, function(err) {
    console.log(err);
});
Do not update

This call will check if your message is existing. If existing, it won’t do anything. Otherwise, your message will be pushed at the end of queue.

uniqueQueue.push("YOUR_MESSAGE", function(err) {
    console.log(err);
});

// or you can do this

uniqueQueue.push("YOUR_MESSAGE", false, function(err) {
    console.log(err);
});

Get

Get first message
uniqueQueue.get(function(err, messages) {
    console.log(err);
    if(messages.length) {
        console.log(messages[0].message);
        console.log(messages[0].updatedAt);
    }
});
Get first N message(s)
uniqueQueue.get(3, function(err, messages) {
    console.log(err);
    for(var i = 0; i < messages.length; i++) {
        console.log(messages[i].message);
        console.log(messages[i].updatedAt);
    }
});
Get all the message(s)
uniqueQueue.get(-1, function(err, messages) {
    console.log(err);
    for(var i = 0; i < messages.length; i++) {
        console.log(messages[i].message);
        console.log(messages[i].updatedAt);
    }
});

Remove Amount

Refer to remove section in Normal Queue.

Remove Messages

Remove one or more certain message(s) in the queue.

uniqueQueue.get(10, function(err, messages) {
    for(var i = 0; i < 5; i++) messages.shift();

    // Remove Messages
    uniqueQueue.removeMessages(messages, function(err, removeCount, notRemovedMessages) {
        console.log(err);
        console.log(removeCount);
        for(var i = 0; i < notRemovedMessages.length; i++) console.log(notRemovedMessages[i].message);
    });
});

Length

Refer to length section in Normal Queue.

Common Functions

Delete Queue

Delete this queue key and values in redis.

uniqueQueue.deleteQueue(function() {});
normalQueue.deleteQueue(function() {});

Destroy Queue Object

Let the queue object disconnect from redis server and let this instance can’t do any other thing any more.

uniqueQueue.destroy();
normalQueue.destroy();
评论
发表评论
暂无评论
WRITTEN BY
機巧死月不會碼代碼
这是一个伪宅,也是一只码畜。
TA的新浪微博
PUBLISHED IN
Node.js之撸

让我们走上一条Node.js之撸吧!

我的收藏