2010-03-15 30 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

相關問題