【发布时间】:2011-06-10 18:27:31
【问题描述】:
我想将 Redis 用作数据库,而不是缓存。根据我(有限的)理解,Redis 是一个内存数据存储。使用 Redis 有哪些风险,我该如何降低这些风险?
【问题讨论】:
标签: redis
我想将 Redis 用作数据库,而不是缓存。根据我(有限的)理解,Redis 是一个内存数据存储。使用 Redis 有哪些风险,我该如何降低这些风险?
【问题讨论】:
标签: redis
您可以通过多种不同方式将 Redis 用作权威存储:
打开 AOF(仅附加文件存储)see AOF docs。这将实时记录针对您的数据集执行的所有 Redis 命令。
使用主从复制see replication docs 运行 Redis。如果您的实例之一发生故障,这将允许您提供高可用性。
如果您在 EC2 之类的设备上运行,您可以 EBS 备份您的 Redis 分区,以提供另一层保护以防止实例故障。
即将到来的是Redis Cluster - 这是专门设计用于以有助于提高 HA 和可扩展性的方式运行 Redis 的一种方式。但是,这至少要再过六个月左右才会出现。
【讨论】:
Redis 是一种内存存储,也可以将数据写回磁盘。您可以指定执行fsync 的次数以使redis 更安全(但也更慢=> 权衡)。
但我仍然不确定 redis 是否处于尚未真正在其中存储(任务)关键数据的状态(还没有?)。例如,如果再有 1 条推文(twitter.com)或类似的东西丢失时这不是一个大问题,那么我肯定会使用 redis。在 redis 自己的网站上也有很多关于 persistence 的信息。
您还应该通过阅读 antirez(redis 维护者)博客文章了解some persistence problems。您应该阅读他的博客,因为他有一些有趣的文章。
【讨论】:
由于 Redis 是一种内存存储,因此您无法存储不适合您机器内存大小的大数据。当 Redis 存储的数据大于 RAM 大小的 1/3 时,它通常工作得非常糟糕。所以,这是使用 Redis 作为数据库的致命限制。
当然,您可以将大数据分布到多个 Redis 实例中,但您必须自己手动完成所有操作。该操作通常是这样完成的(假设您从一开始只有 1 个实例):
这就是 Redis 的扩展方式!您还必须停止服务以防止在迁移期间进行任何写入。
根据我们遇到的经验,我们对 Redis 的结论是:Redis 不是存储超过 30G 数据的正确选择,Redis 不可扩展,Redis 非常适合原型开发。
后来我们找到了一个Redis的替代方案,那就是SSDB(https://github.com/ideawu/ssdb),一个几乎支持Redis所有API的leveldb服务器,适合存储1TB以上的数据,只取决于大小你的硬盘。
【讨论】:
我想分享一些我们通过在我们的服务中使用 Redis 作为主数据库所学到的一些东西。我们选择 Redis,因为我们有无法分区的数据。我们希望从一个盒子中获得最好的性能
优点:
缺点:
【讨论】: