如何从redis商店客户端中的键/值对中获取键值?

时间:2013-04-25 13:24:48

标签: node.js dictionary redis socket.io node-redis

我在redis商店中为我的socket.io聊天应用程序存储用户名/ SocketID对。

当用户断开连接时,我需要从redis商店中删除用户名/套接字ID对。我已经看到了如何从键中获取值,但从来没有从值中获取键。可能吗?或者无论如何我只能从值中删除键/值对。这是我的代码

用于添加到连接上的商店

socket.on('username', function (username) {

    client.set(username, socket.id, function (err) {
        console.log(username + ":" + socket.id);
    });

});

对于断开连接,客户端不知道何时会发生断开连接,可能由于互联网连接丢失而发生,但是当套接字断开连接时,它总是会遇到“断开连接”事件。在这种情况下,我需要删除用户名/套接字ID对。

socket.on('disconnect', function () {

// dont know the username??

    client.del(username, socket.id, function (err) {
        if (err)
            console.log(err);
        else {
            socket.disconnect();
            console.log(socket.id + " DISCONNECTED");
        }
    });
});

2 个答案:

答案 0 :(得分:1)

最简单的方法是存储两个对。一个username/id,一个id/username。所以无论你有什么信息,你都可以得到另一个,结果也是另一个键/值对。

答案 1 :(得分:0)

我建议您将socket.io Id合并到密钥中,例如

id:username

然后你可以做这样的事情

client.keys([socket.id + ':*'], function (err, result) {
    if (err){
        //handle in some way
    }

    for (var r in result) {
        var key = result[r];

        client.del(key, function(err, result){
            // handle in some way
        });
    }
});