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