【发布时间】:2020-03-26 21:55:42
【问题描述】:
这里是使用redis的利弊。
优点
快速
事务(因为单线程)
缺点
不支持辅助键
不支持重新索引
与 mongodb、dynamodb 不同,没有可靠的变更流
成本(由于所有数据都必须保存在内存中,我们需要越来越多的内存)
没有可靠的持久性。 (PS 人们说 rdb 快照用作 redis 的备份存储,但帮助我了解当我们有 12 gb ram 并放入 13 gb 数据时会发生什么。redis 将只有 12 gb 数据,但如果使用 rdb 快照如果我启动另一个 20gb ram 的 redis,它会保留我所有的数据还是 1gb 永远消失了。这种机制有多可靠??)
没有自动平衡键。 (应用级分片是必须的)
考虑到上述优点和缺点,我只看到少数用例可以将 redis 作为 Only 和 Primary 数据存储。 喜欢
- 会话存储。
我错过了什么吗? 与其他数据库相比,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 中编写了自己的序列化程序来读取/写入数据到这个数据库。我希望这能为您提供一点参考。