带有Redis的Node.js - 排序集添加

时间:2015-12-28 14:26:01

标签: node.js redis

我尝试使用node_redis制作网址列表。在下面的代码中,我获取了有序集合的长度,并将元素添加到集合的该位置。

client.on('connect', function() {       
    client.zcard('url',function(err, reply) {
        if (reply == undefined) {
            length = 0;
        } else {
            length = reply;
        }
    });
    client.zadd('url',length,pagename,function(err1, reply1) {
        console.log("added="+reply1);
    });             
    client.zrange('url',0,-1,'withscores',function(err2, reply2) {
        console.log(reply2);
    });
});

我的问题是reply1返回undefined,这意味着length没有被前一段代码分配集合的长度。我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

您可以在client.on('connect', function() { client.zcard('url',function(err, reply) { if (reply == undefined) { length = 0; } else { length = reply; } client.zadd('url',length,pagename,function(err1, reply1) { console.log("added="+reply1); }); client.zrange('url',0,-1,'withscores',function(err2, reply2) { console.log(reply2); }); }); }); 的回复中包含需要执行的操作,这样您就可以确保在回调为您提供回复后发生。您所拥有的示例属于JS已经在检查长度值而不等待ZCARD调用实例化的情况

lena.png

答案 1 :(得分:0)

您可以使用NX(不存在)标记和ZCOUNT。

ZCOUNT url -inf +inf 
ZADD url NX http://a.com
ZRANGE url 0 -1 WITHSCORES