我所说的“持久”是指服务器随时可能崩溃,只要磁盘保持完好,就不会丢失任何数据(参见ACID)。似乎这就是日志模式的用途,但是如果您启用日志,这不会破坏对内存数据进行操作的目的吗?读取操作可能不受日志的影响,但似乎日志会降低您的写入性能。
问问题
11293 次
1 回答
64
Redis通常不会部署为“持久”数据存储(在 ACID 中的“D”的意义上),即使使用日志也是如此。大多数用例故意牺牲一点耐用性来换取速度。
但是,可以选择将“仅附加文件”存储模式配置为以持久方式运行,但会以性能为代价。每次修改都必须为fsync()付费。要进行配置,请在 .conf 文件中设置这两个选项:
appendonly yes
appendfsync always
来自文档:仅附加文件的耐用性如何?
检查 redis.conf,可以配置 Redis 多少次 fsync() 磁盘上的数据。有三个选项:
- 每次将新命令附加到附加日志文件时,Fsync()。非常非常慢,非常安全。
- Fsync() 每秒一次。足够快,如果发生灾难,您可能会丢失 1 秒的数据。
- 永远不要 fsync(),只需将您的数据交到操作系统手中。更快更不安全的方法。
(请注意,Redis post-2.0.0 附带的配置文件中 appendfsync 的默认值是everysec
,而不是always
。)
于 2010-03-25T02:08:05.510 回答