【问题标题】:redis- Should I use redis to store chat messages?redis - 我应该使用 redis 来存储聊天消息吗?
【发布时间】:2018-02-06 02:05:19
【问题描述】:

所以我目前正在处理聊天,我想知道是否可以使用 Redis 来存储聊天消息。这些消息将仅在网络上,并且我希望每个私人聊天至少有 20 条消息的聊天历史记录。 Chats 订阅者将已存储在 MongoDB 中。

我主要想使用 Redis,因为我摆脱了 MongoDB 的东西,以获得更快的速度。

我已经在使用 Pub/Sub,但是在 Redis 列表中存储一个副本呢?还有阅读状态呢,我该如何实现呢?

【问题讨论】:

  • 嗯,这取决于您以后是否需要访问这些消息,因为您不能真正信任 redis,因为它不适合长期数据存储。例如,如果您的 redis 服务器重新启动,则数据将消失。如果你真的不在乎这个,那就去吧

标签: mongodb server redis instant-messaging


【解决方案1】:

Redis只有在断电的情况下才会丢失数据,如果系统正常关机,它会保存自己的数据,这种情况下数据不会丢失。

当达到大小限制或基于日期(每周或每月)时,将数据从 redis 转储到 mongoDb/anyotherDb 是一种很好的方法,以便您的实时聊天数据库保持轻量级。

现在许多现代系统都在为停电做准备,UPS 将运行并且系统将正常关闭。 见:https://hackernoon.com/how-to-shutdown-your-servers-in-case-of-power-failure-ups-nut-co-34d22a08e92

还有读取状态呢,我该如何实现呢?

取决于您正在实施的协议,如果您使用的是 xmppsee this。 否则,您可以使用消息模型中的属性,例如“DeliveryStatus”并将其设置为您的enums(1. 已发送,2. 已交付,3. 读取)。在服务器收到消息后立即将消息标记为已发送。对于已交付和已读取,您的客户将向您发回数据包,指示相应的操作已发生。

【讨论】:

    【解决方案2】:

    正如上面评论中指出的,这里要考虑的重要一点是持久性模型。 Redis 提供了一些持久性(使用快照和 aof 文件)。重要的是首先了解您需要什么:

    您能承受丢失所有数据的后果吗?你能承受丢失一些数据的代价吗?如果答案是否定的,那么也许你不应该为 redis 操心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-11
      • 2016-01-08
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 2017-12-07
      • 2012-09-23
      • 1970-01-01
      相关资源
      最近更新 更多