【发布时间】:2020-01-22 07:02:38
【问题描述】:
我想实现实时聊天。我的主要数据库是 PostgreSQL,后端是用 NodeJS 编写的。客户端将是移动设备。
据我了解,要实现消息传递的实时性能,我需要使用 Redis。 因此,我的计划是使用 Redis 来处理 2 人或更多人之间的 X 个最新消息(群聊),例如 1000 条,并且所有内容都在我的主数据库(即 PostgreSQL)中同步和备份。 然而,由于 Redis 本质上只是 RAM,聊天记录可能太“脆弱”,因为在 RAM 中存储数据的易失性。 所以如果我的redis服务器出现了一些意外的临时故障,最近的对话消息就会丢失。
当今实施此类事情的最佳做法是什么? 我只需要将 Redis 数据持久化到磁盘吗?但在那种情况下,这不会影响性能,因为它会增加每条发送消息的写入时间吗?
或者我应该只准备一个恢复方法,从 PostgreSQL 中获取最近的历史记录,以防我的 redis 聊天记录列表为空?
P.S - 既然如此,您能否建议一种维护用户状态(在线/离线)的好方法?是否也使用 Redis 完成?
【问题讨论】:
标签: database postgresql redis chat real-time