我正在使用redis服务器为socket.io中的聊天应用程序存储键值(username-socketID)对。
我遇到的问题是相同的用户名可以从不同的设备登录,因此将具有不同的套接字ID。所以我必须将一个socketID数组与一个用户名相关联。 我试图将数组与键相关联,但它似乎只将数组的第一个元素作为字符串。以下是我的代码
将数组设置为键:
var socketIDs = [];
socketIDs.push(socket.id);
client.set(username, socketIDs, function (err) {
console.log("IN USERNAME EVENT" + username + ":" + socketIDs);
});
从密钥中获取数组:
client.get(username, function (err, socketIDs) {
var i = socketIDs.indexOf(socket.id);
if (i != -1)
{
socketIDs.splice(i, 1);
}
client.set(username, socketIDs, function (err) {
console.log(username + " DISCONNECTED");
socket.disconnect();
});
});
当我尝试获取与用户名相关联的值时,我只将socketID作为字符串而不是我最初添加的数组格式。
对此有何修复?或者什么是满足我为单个密钥存储多个值的要求的最佳方法?
答案 0 :(得分:3)
我建议使用list
或set
。除非您需要重复检查,否则我会使用list
(如果是,请使用set
)。以下所有示例均基于list
,但您可以找到set
here的等效项。
添加新的套接字ID
client.lpush(username, socket.id, function(err) {
console.log('Prepended new socket ID to list');
});
获取用户的所有套接字ID
client.lrange(username, 0, -1, function(err, socketIds) {
});
删除给定的套接字ID
client.lrem(username, socketId, 0, function(err) {
});
(我假设你正在使用node_redis
lib。)