使用 Redis 作为唯一和主数据库

bes*_*hes 6 database redis

以下是使用 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,它会保存我所有的数据还是 1 gb 永远消失了。这种机制有多可靠??)

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

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

  1. 会话存储。

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

Tim*_*sen 7

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

那么 Redis 适合什么用途呢?Redis 可能适合存储应用程序会话状态等内容。这往往是相当少量的信息,而且如果 Redis 宕机,也不会有太大的风险(也许在最坏的情况下,某些用户将不得不再次登录)。