【发布时间】:2014-07-02 23:50:55
【问题描述】:
这里是我添加集合users 的地方。每个user 都有一个userID 和一个socketID:
socket.on('login', function(userID){
console.log('io.sockets.on -- socket.on -- userID: ' + userID);
console.log('socket.id = ' + socket.id);
var user = userID;
// add first user
redis.sadd("users", user);
redis.hmset(user, "socketID", socket.id, "userID", userID);
});
这里是我试图检索集合中的所有users 并循环它们的地方:
// Get the list of online users and show Presence
redis.smembers("users", function(err,results) {
var onlineUsers = results;
console.log("onlineUsers = " + onlineUsers);
for (var onlineUser in onlineUsers) {
console.log("onlineUser = " + onlineUser);
var userID = redis.hget(onlineUser,"userID", function(err,reply) {
console.log("onlineUser hget: " + reply);
data = JSON.parse(reply);
console.log("data: " +data);
});
});
这里是日志:
16:41:15 web.1 | onlineUsers = user:AuY0Uopq6X,user:YbgtwQs8Vt
16:41:16 web.1 | onlineUser = 0
16:41:16 web.1 | onlineUser = 1
16:41:16 web.1 | onlineUser hget: null
16:41:16 web.1 | data: null
16:41:16 web.1 | onlineUser hget: null
16:41:16 web.1 | data: null
我对 node-redis 以及如何简单地获取 userIDs 感到非常困惑。我知道它们在那里,因为 onlineUsers 包含它们,但是我在迭代中做错了!
编辑
我尝试使用redis-cli 并且密钥在那里:
redis 127.0.0.1:6379> SMEMBERS users
1) "user:AuY0Uopq6X"
2) "user:YbgtwQs8Vt"
redis 127.0.0.1:6379> HKEYS "user:AuY0Uopq6X"
1) "socketID"
redis 127.0.0.1:6379>
使用上面的代码仍然没有运气。
编辑 - 已解决
我对如何设置和获取数据有疑问。我没有在“用户设置”的右键上设置“用户哈希”。这是正确的版本:
var user = userID;
// add first user
redis.sadd("users", user);
redis.hmset("users:"+user, "socketID", socket.id, "userID", userID);
但是,我还需要在获取用户哈希时实现 Philippe T 的更改。
【问题讨论】:
-
你检查过你的hget命令回调中的err值是多少?
-
16:56:26 web.1 |错误:空
-
全部为空!我怀疑
for (var onlineUser in onlineUsers)没有给我onlineUser的对象
标签: node.js redis node-redis