使用Node&获取10个随机项目Redis的

时间:2013-01-19 21:48:23

标签: node.js mongodb redis

我正在努力研究如何从Mongo系列中获得一组10个随机物品。我的计划是在Redis中存储一组Mongo ID,使用Redis SRANDMEMBER命令获取10个随机ID,然后从Mongo集合中获取它们。

由于我正在使用Node,因此我无法使用SRANDMEMBER 10,因为节点“redis”包不接受可选的第二个参数。

我真正磕磕绊绊的是如何以异步友好的方式做到这一点。我尝试使用节点异步库提供的几个工具,例如Waterfall和While,但Redis调用总是比数据晚。


编辑#2:

在回答下面的帮助时,我已经完善了以下功能:

client.send_command("SRANDMEMBER", ["album_id_set", "10"], function(err, results) {
    if (err) console.log('Redis error: ' + err);
    Album.find({
        '_id' : { $in: results }
    }, function(err, result){
        if (err) console.log('Mongo error: ' + err);
        response.json(result);
    });
});

1 个答案:

答案 0 :(得分:2)

使用redisnode-redis包的解决方案是发送原始命令 我已经测试了两个软件包并且都适合我。

使用node-redis Package

https://github.com/tim-smart/node-redis

node-redis返回一个缓冲对象数组。

client.sendCommand('SRANDMEMBER', ['album_id_set', '10'], function(err, reply) {
    for (var i = 0; i < reply.length; i++) {
        console.log(reply[i].toString());
    };
});

使用redis包

https://github.com/mranney/node_redis

redis返回一个字符串数组。

client.send_command('SRANDMEMBER', ['album_id_set', '10'], console.log);

有关详细信息,请参阅send_command文档。