按字段和值进行Redis哈希搜索

时间:2018-09-06 11:14:09

标签: hash redis socket.io node-redis

这是我的用例:

我有一个简单的客户端/服务器应用程序,通信通过socket.io进行。由于我需要跟踪房间名称及其对应的套接字所有者之间的关系,因此我决定创建简单的Redis 哈希,其中每个对都是。这个哈希值使我可以通过房间名称快速找到特定的房间所有者socketId。到目前为止,一切都很好。 上面的哈希值是通过node_redis subscribe通过非常简单的haset调用在redis.client.hset(keyRoomToSocketId, room, socketId, cb);后端事件上更新的 这样可以确保每次有新的套接字到达并使用唯一的名称创建自己的房间时,将其socketId设置为哈希值及其对应的字段room

现在,我想在套接字disconnect事件上找到该对,并将socketId设置为空字符串。显然(告诉我,如果我错了),我无法通过socketId搜索哈希。我的想法是并行制作一个散列,其中要反转的那对,即这将使我可以按socketId搜索第二个哈希,检索房间,从那里删除该对,然后搜索第一个哈希,并将socketId设置为“”成为相应的对。

我有什么想念的吗?我可以使用Redis以更有效的方式做到这一点吗?

2 个答案:

答案 0 :(得分:1)

这应该有效-您的想法是正确的。您将要做的基本上是双向映射,而其中的一两个哈希很简单高效,主要的“价格”是数据的重复。非规范化是NoSQL(特别是Redis)的常见做法。

答案 1 :(得分:0)

实际上,根据事实,我将redis与socket.io一起使用,最后只得到一个哈希,pair是。 作为第二个哈希,我在后端使用socket对象-触发subscribe事件时,我为socket.ownRoom字段分配空间。在disconnect事件中,我正在使用socket对象中的此字段,并搜索到唯一的哈希。