所谓“持久性”,是指服务器可能会在任何时候崩溃,只要磁盘仍然完好无损,就不会丢失任何数据(请参见ACID)。似乎这就是日志模式的用途,但如果启用了日志记录,那么是否就打败了在内存中操作数据的目的呢?读操作可能不受日志记录的影响,但日志记录似乎会破坏写入性能。
Redis通常不作为“持久”的数据存储(在ACID中的“D”方面),即使使用日志记录也是如此。大多数用例故意在速度上牺牲了一点耐久性。
然而,“仅追加文件”存储模式可以选择以耐久的方式进行配置,但代价是降低性能。它将需要在每次修改时支付一个fsync()代价。要进行配置,请在您的.conf文件中设置这两个选项:
appendonly yes
appendfsync always
从文档中得知:追加日志文件有多持久?
查看redis.conf,你可以配置Redis将数据同步到磁盘上的次数。有三个选项:
- 每次将新命令附加到追加日志文件时都会执行fsync(),非常慢,但非常安全。
- 每秒钟执行一次fsync(),速度足够快,并且如果发生灾难,您可以丢失1秒钟的数据。
- 从不执行fsync(),只是将数据交给操作系统处理,速度更快但不安全。
(请注意,默认情况下,自Redis 2.0.0版本之后的配置文件中appendfsync的默认值为everysec而不是always。)