2010-03-15 36 views
36

“耐用”我的意思是,服务器可以在任何时候崩溃,只要磁盘保持完好,没有数据丢失(请参阅ACID)。似乎这就是日志模式的用处,但是如果启用日记功能,这不会影响在内存数据上运行的目的吗?阅读操作可能不会受到日志记录的影响,但它看起来像日志记录会杀死您的写入性能。redis是一个持久的数据存储吗?

+5

你不能两者兼得。无论是有些数据都处于无效状态,或者您必须等待所有数据写入磁盘。 – 2010-03-15 20:08:28

+5

这正是我问这个问题的原因。 – allyourcode 2010-03-18 06:45:22

回答

49

Redis不是通常作为一个“持久”数据存储(即ACID中的“D”意义上),即使使用日记功能。大多数使用情况都会故意牺牲一点耐用性来换取速度。

但是,“追加唯一文件”存储模式可以选择配置为以性能为代价以持久方式运行。每次修改都需要支付fsync()。要配置此,在你的.conf文件中设置这两个选项:

appendonly yes 
appendfsync always 

从文档:How durable is the append only file?

检查redis.conf,您可以配置 Redis的多少次FSYNC()数据磁盘上的 。有三种选择:

  • Fsync()每次将新命令添加到附加日志文件 时。很 很慢,很安全。
  • Fsync()每秒钟一次 。足够快,并且如果发生 灾难,您可以丢失1秒的数据。
  • 从不fsync(),只需将您的 数据交给Operating 系统即可。更快和不安全的方法。

(请注意,对于与Redis的-2.0.0后的配置文件航运appendfsync默认为everysec,而不是always。)

+3

很高兴知道。你能提供一个链接来支持你在说什么吗? – allyourcode 2010-03-25 19:35:25

+1

@FrankFarmer我编辑了一些答案,因为它已经过时了关于配置默认的信息,并且通过以“否”引导而“掩埋标题”有点过时。随时提高我的改进。 :-) – HostileFork 2015-02-27 18:04:54

+1

@HostileFork考虑到你所做的实质性改变,我认为你最好提交自己的答案。已经足够长的时间了,肯定会有一个新的视角 – 2015-02-28 00:39:36

相关问题