Redis + Node.js – 循环设置成员

这是我添加设置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和如何简单地获得userID 。 我知道他们在那里,因为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的更改。

我认为你通过索引的“用户”元素而不是值,试试这个:

  // Get the list of online users and show Presence redis.smembers("users", function(err,results) { var onlineUsers = results; console.log("onlineUsers = " + onlineUsers); for (var i in onlineUsers) { console.log("onlineUser = " + i); console.log("onlineUser = " + onlineUsers[i]); var userID = redis.hget(onlineUsers[i],"userID", function(err,reply) { console.log("onlineUser hget: " + reply); data = JSON.parse(reply); console.log("data: " +data); }); });