node.js - 在 redis 中存储 node.js 聊天的消息。如何?

标签 node.js redis chat

我在 node.js + javascript 前端为一个网站实现了聊天。 我决定使用 Redis 来持久化对话,这样当用户刷新页面时,他可以获得所有对话。对话应基于服务器 session 进行存储。

我想知道有没有什么办法可以在 redis 中存储哈希列表作为值? 例如,类似:

client.rpush("conversations:"+conversation_id, message);

我想用键 [sender_id]#[receiver_id] 以哈希格式存储对话。这样,当有人登录时,我会通过运行所有对话来获得该用户参与的所有对话。这样,我需要一些时间来完成所有对话,并且只为用户获取那些对话。这将如何影响性能?

或者第二种方式,也许更好的方式是以格式为用户存储消息:

rpush(user_id, {sender: sen, receiver: rec, content: con, timestamo: tmstp})

这样我可以轻松地为用户重建所有对话并在用户登录时显示它们。 这种方法的优点是我需要更少的时间来获取所有用户对话(我直接从列表中获取),但这会占用更多空间,因为相同的消息在发送者和接收者的消息列表中保存了两次。

你的意思是,什么是更好的方法?

最佳答案

我对此有一个想法。将所有消息(具有可用格式)发布到 redis 中的 channel ,并使用您的首选语言创建一些订阅者,并将这些消息作为批量插入存储到数据库。

关于node.js - 在 redis 中存储 node.js 聊天的消息。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18622307/

相关文章:

javascript - Youtube API v3 对任何请求仅返回 19 NextPageToken

javascript - 将所有innerText从页面拉入json的最佳方法?

c# - StackExchange.Redis可以用来存储POCO吗?

java - 集群模式下的自动故障转移处理已禁用 Redis ElastiCache

Android Whatsapp/聊天示例

node.js - 尝试执行selenium后出现错误 "Server terminated early with status 1"

node.js - Nodejs 或 ExpressJS Windows 身份验证

python - NGINX/Gunicorn/Django-RQ : How to log each rq-worker to a different file

jquery - 如何使用 css 和 jquery 给文本区域的滚动选项提供一定的高度

javascript - react Pubnub 聊天。消息重复或根本没有消息