增加id并使用ioredis为redis数据库

时间:2015-10-07 10:58:45

标签: node.js asynchronous redis synchronous node-redis

我使用redis在博客上工作,我陷入了api级别。 我试图做以下事情:

MULTI
INCR id
SET post:{id} json_value //Stucked here
SADD posts {id}
EXEC

那么如何获取SET帖子的ID:{id}?

我现在有以下代码,但尚无法使用。

// Create post
function cpost(json) {
    client.pipeline()
        .incr('id'))
        .set('post:' + client.get('id:post', function (err, results) {
            return results;
        }), json)
        .sadd('posts, client.get('id:post', function (err, results) {
            return results;
        })) // posts post
        .exec(function (err, results) {

    });
}

使用ioredis

有关如何获取ID值的任何想法?

2 个答案:

答案 0 :(得分:3)

如果您想进行交易,则应使用multi()代替pipeline()(我认为情况属实)。

以下是我处理此问题的方法。

我只能使用promises分两步完成。您也可以使用回调来实现相同的功能。无论哪种方式,增量都不在交易或批次中。

function cpost(json) {
    client.incr('id', 'post').then(function (postId) {
        client.multi()
            .set('blog:post:' + postId, json)
            .sadd('blog:posts', postId)
            .exec()
            .then(
                function onSuccess(data) {
                    // success handling goes here
                },
                function onError(data) {
                    // error handling goes here
                }
            );
}

答案 1 :(得分:1)

我不认为这是解决问题的正确方法,但我必须继续前进。 有史以来最简单的解决方案(柜台):

var id = 0;
function cpost(json) {
    id++;
    client.pipeline()
        .incr('id', 'post')
        .set('blog:post:' + id, json) // blog:post:1
        .sadd('blog:posts', id) // blog:posts id:post
        .exec(function (err, results) {
    });
}