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

标签 hash redis socket.io node-redis

这是我的用例:

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

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

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

最佳答案

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

关于hash - Redis 按字段和值进行哈希搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52202826/

相关文章:

regex - 计数grep匹配的数量?

perl - 是否有一种简单的方法来验证散列元素的散列是否存在并已定义?

algorithm - 如何避免crc16冲突?

redis - 如何在一个命令中批量删除redis键

python - 如何从 Node 服务器通知 python 客户端?

node.js - 在nodejs上运行socket.io客户端代码

security - md5的碰撞率是多少?

linux - 权限被拒绝 OsError : [Errno 13] (file in use) Celery - Redis -Django

node.js - 443 apache SSL 端口和 8888 https 监听端口不起作用 - Node.js - socket.io

javascript - 在socket.io 1.4.5中获取连接的IP