【问题标题】:Using Redis as Only and Primary Database将 Redis 用作唯一数据库和主数据库
【发布时间】:2020-03-26 21:55:42
【问题描述】:

这里是使用redis的利弊。

优点

  1. 快速

  2. 事务(因为单线程)

缺点

  1. 不支持辅助键

  2. 不支持重新索引

  3. 与 mongodb、dynamodb 不同,没有可靠的变更流

  4. 成本(由于所有数据都必须保存在内存中,我们需要越来越多的内存)

  5. 没有可靠的持久性。 (PS 人们说 rdb 快照用作 redis 的备份存储,但帮助我了解当我们有 12 gb ram 并放入 13 gb 数据时会发生什么。redis 将只有 12 gb 数据,但如果使用 rdb 快照如果我启动另一个 20gb ram 的 redis,它会保留我所有的数据还是 1gb 永远消失了。这种机制有多可靠??)

  6. 没有自动平衡键。 (应用级分片是必须的)

考虑到上述优点和缺点,我只看到少数用例可以将 redis 作为 Only 和 Primary 数据存储。 喜欢

  1. 会话存储。

我错过了什么吗? 与其他数据库相比,redis 缺少哪些额外的功能,例如 mongodb、mysql(这里我只谈论生产就绪和可靠性,而不是开始 nosql 与 sql 的辩论:)。

【问题讨论】:

  • 我会要求不要关闭,这是人们常犯的错误(选择 redis 作为主存储,但不知道他们会遇到什么。)而这个问题可以防止这种情况发生,
  • 我们使用 Redis 作为我们的主要数据存储,并且自 2015 年以来一直没有任何问题。它对我们有用,因为我们可以预测数据库几乎看不到活动的时间窗口(非营业时间)。我们将它与 RDB 和 AOF 设置结合使用,并在 conf 文件中将 appendOnly 设置为 off。我们务实地在重启后打开它,因为 appendOnly 可以覆盖整个数据库。由于我们可以预测没有流量的时间窗口,即当我们运行 BGSAVE 以将任何未决更改从 AOF 快照到 RDB 并将此文件的备份推送到 AWS S3 时,保留最近 7 天的 RDB 文件。
  • 我们供您参考的数据库大小约为。 5GB,其中 2x 集合占 3.5GB。在关系数据库的意义上,这两个集合是事务和事务项,每个集合大约有。 10MM 和 15MM 实体(又名行)。我们已经在 Go 中编写了自己的序列化程序来读取/写入数据到这个数据库。我希望这能为您提供一点参考。

标签: database redis


【解决方案1】:

Redis 实际上不是数据存储,也不是旨在完成数据库(或者可能是文件系统)的设计目的。正如您正确指出的那样,如果您需要存储比 RAM 容易容纳的信息更多的信息,那么 Redis 等内存缓存解决方案不再适合。尝试像使用数据库一样使用 Redis 的另一个大风险是,如果 Redis 出现故障,您将失去所有状态。请注意,实际上可以将 Redis 配置为将定期快照拍摄到持久层中,例如数据库。但即使在这种情况下,您的缓存在快照之间仍然容易受到攻击。为了解决这个问题,您可以增加数据库快照的频率,但在此限制下,您的 Redis 缓存将开始表现得更像数据库,而不是内存中的快速缓存。

那么 Redis 适合什么? Redis 可能适合存储应用程序会话状态等内容。这往往是相当少量的信息,而且如果 Redis 出现故障也不会有太大的风险(也许在最坏的情况下某些用户必须重新登录)。

【讨论】:

    猜你喜欢
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多