2013-04-25 3 views
2

Я сохраняю имя пользователя/пары SocketID в redis store для моего приложения chat.io chat.io.Как получить ключ от значения в паре ключей/значений в клиенте redis store?

Когда пользователь отключается, мне нужно удалить пару имени пользователя/socketID из магазина redis. Я видел, как получить значение из ключа, но никогда не ключ от значения. Является ли это возможным? или в любом случае, как я могу удалить пару ключ/значение только из значения. Вот мой код

Для добавления хранить на подключениях

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

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

}); 

Для отключения, клиент не будет знать, когда разрыв произойдет, может произойти из-за потери подключения к Интернету, но когда сокет разрывает это всегда ударяет «отключить» событие. В этом случае мне нужно удалить пару username/socketID.

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"); 
     } 
    }); 
}); 

ответ

1

Самый простой способ для хранения две пары. Один с username/id и один с id/username. Таким образом, независимо от имеющейся информации, вы можете получить другую и, как результат, другую пару ключ/значение.

+0

Спасибо, я сделал это решение. Но я надеялся, что будет более прямое решение этой проблемы. – Bitsian

+0

Если у вас есть индекс (ключ) и данные (значение). Вы не можете искать данные без индекса. Или вы делаете «сканирование таблицы». Такова природа индекса/данных. – heinob

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 
     }); 
    } 
}); 
+0

Мне нужно найти идентификатор socketID от имени пользователя. Как и в случае, когда я тоже отправляю сообщение другому пользователю, я получаю файл socket.id с именем пользователя и отправляю сообщение на этот идентификатор socketID. Поэтому мне определенно нужен способ узнать ключ от ценности и наоборот. – Bitsian

+0

В этом случае см. Ответ выше от heinob и сохраните два ключа. Я бы рекомендовал использовать двоеточия над слэшами, чтобы быть в большей степени совместимыми с ожидаемыми форматами клавиш Redis, но –