如何在redis中循环保存数据

时间:2011-08-01 09:22:56

标签: node.js redis

使用此redis节点客户端 https://github.com/mranney/node_redis

我想在循环中同时保存三个用途。 但是只能保存最后一个用户才能保存? 在这里,我想将rahul0,rahul1,rahul2保存为redis中的用户 但只有rahul2才能得救。

var redis = require("redis"),
    sys = require("sys"),
    client = redis.createClient();

client.del("channels.59-O");

for(var j=0; j<3; j++) {
    client.hgetall("channels.59-O", makeCallback(j));
    function makeCallback(index) {
        return function(err, result){
            console.log('check '+sys.inspect(result));
            if(!result.users) {
                var channeldata={
                    'users':"rahul"+index
                };
                console.log('dsfsdc'+sys.inspect(channeldata));
                client.hmset('channels.59-O', channeldata);
            } else {
                var users=result.users.split(',');
                users.push("rahul"+index);
                var channeldata={
                    'users':users.join(',')
                };
                console.log('check 1 '+sys.inspect(channeldata));
                client.hmset('channels.59-O', channeldata);
            }
        };
    }
}

请建议做什么?

1 个答案:

答案 0 :(得分:0)

您每次都在使用相同的哈希键,因此最后一个用户hmset将胜过其他用户。

更改

client.hmset('channels.59-O', channeldata)

client.hmset('channels.59-O:' + index, channeldata)

这样,每个用户都将拥有自己的哈希密钥,由后缀标识。

因此,在您的示例中,您可以在此之后访问(例如,通过redis-cli),channels.59-O:0访问rahul0数据,channels.59-O:1访问rahul1数据等

此外,您必须管理他们的删除,client.del("channels.59-O")现在必须是client.del("channels.59-O:0")client.del("channels.59-O:1")等。

希望有所帮助。另请查看类似的答案:Writing a query to add multiple values to a key in REDIS Hashes?