Redis是一个持久化的数据存储吗?

47

所谓“持久性”,是指服务器可能会在任何时候崩溃,只要磁盘仍然完好无损,就不会丢失任何数据(请参见ACID)。似乎这就是日志模式的用途,但如果启用了日志记录,那么是否就打败了在内存中操作数据的目的呢?读操作可能不受日志记录的影响,但日志记录似乎会破坏写入性能。


5
不能两全其美。要么某些数据处于未定状态,要么你必须等待所有数据都被写入磁盘。 - C. Ross
5
这正是我提出这个问题的原因。 - allyourcode
1个回答

64

Redis通常不作为“持久”的数据存储(在ACID中的“D”方面),即使使用日志记录也是如此。大多数用例故意在速度上牺牲了一点耐久性。

然而,“仅追加文件”存储模式可以选择以耐久的方式进行配置,但代价是降低性能。它将需要在每次修改时支付一个fsync()代价。要进行配置,请在您的.conf文件中设置这两个选项:

 appendonly yes
 appendfsync always

从文档中得知:追加日志文件有多持久?

查看redis.conf,你可以配置Redis将数据同步到磁盘上的次数。有三个选项:

  • 每次将新命令附加到追加日志文件时都会执行fsync(),非常慢,但非常安全。
  • 每秒钟执行一次fsync(),速度足够快,并且如果发生灾难,您可以丢失1秒钟的数据。
  • 从不执行fsync(),只是将数据交给操作系统处理,速度更快但不安全。

(请注意,默认情况下,自Redis 2.0.0版本之后的配置文件中appendfsync的默认值为everysec而不是always。)


3
知道这件事很好。你能提供一个链接来支持你所说的内容吗? - allyourcode
1
@FrankFarmer,我稍微编辑了一下答案,因为它包含有关配置默认值的过时信息,而且在标题上方加了一个"不是"的字眼。如果你有更好的建议,请随时提出。 :-) - HostileFork says dont trust SE
1
@HostileFork,鉴于您所做的重大更改,我认为您最好提交自己的答案。已经过了足够长的时间,新的视角肯定是受欢迎的。 - Frank Farmer
@FrankFarmer,它需要很长时间才能到达页面顶部!重点是这个条目出现在顶部,并且这是Google上关于Redis耐久性的最高搜索结果。所以如果您对编辑感到满意,我也很高兴... - HostileFork says dont trust SE
1
链接已失效,新链接:Redis Persistence – Redis - 追加文件有多耐用? - Jason Law

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接