2016-10-10 49 views
2

這個問題是關於Redis持久性的。redis中的AOF和RDB備份

我使用redis作爲社交網站的「快速後端」。這是一個單一的服務器設置。我一直在穩步地將PostgreSQL的職責轉移給Redis。目前在etc/redis/redis.conf中,附加設置設置爲appendonly no。快照設置爲save 900 1save 300 10save 60 10000。所有這一切都適用於生產和開發。根據生產日誌,save 60 10000會被大量調用。這是否意味着實際上,我每60秒獲得一次備份?

一些文獻建議將AOF和RDB備份一起使用。因此我正在考慮轉向appendonly on並使用appendfsync everysec。對於曾經有過兩面硬幣經驗的人:

1)會不會使用appendonly onappendfsync everysec導致性能下降?它會撞到CPU嗎?寫入負載偏高。

2)一旦我用這些新設置重新啓動redis服務器,我仍然會丟失數據的最後60秒,對不對?

3)重啓時間是否需要擔心?我的dump.rdb文件很小; 〜90MB。

我試圖找出更多關於redis持久性,並得到我的期望。就我個人而言,在發生災難的情況下,我丟掉了60多個數據,因此我是否應該使用AOF也是我正在思考的問題。歡迎隨時參加。謝謝!

回答

8

這是否意味着實際上,我每60秒獲得一次備份?

NO。 Redis會在60秒後保存背景,如果至少有10000個密鑰已更改。否則,它不做後臺保存。

將appendonly使用和appendfsync everysec導致性能降級?它會撞到CPU嗎?寫入負載偏高。

它取決於很多事情,例如,磁盤性能(SSD VS HDD),寫入/讀取負載(QPS),數據模型等等。您需要在您的特定環境中對自己的數據進行基準測試。

一旦我用這些新設置重新啓動redis服務器,我仍然會丟失數據的最後60秒,對不對?

NO。如果打開AOF和RDB,則當Redis重新啓動時,AOF文件將用於重建數據庫。由於您將其配置爲appendfsync everysec,因此只會丟失最後的1秒的數據。

重新啓動時間有什麼好擔心的?我的dump.rdb文件很小; 〜90MB。

如果打開AOF,並且Redis重新啓動時,它將重播AOF文件中的日誌以重建數據庫。通常AOF文件大於RDB文件,並且可能比從RDB文件恢復慢。你應該擔心嗎?在您的特定環境中對自己的數據進行基準測試。

編輯

重要提示

假設你已經設置Redis的使用RDB保存,並寫入大量數據到Redis的。過了一會兒,你想打開AOF保存。 切勿修改配置文件以打開AOF並重新啓動REDIS,否則您將丟失所有內容

因爲,一旦在redis.conf中設置了appendonly yes,並重新啓動Redis,它將從AOF文件加載數據,無論文件是否存在。如果該文件不存在,它將創建一個空文件,並嘗試從該空文件加載數據。所以你會失去一切。

事實上,您不必重新啓動Redis來打開AOF。相反,您可以使用config set命令來動態打開它:config set appendonly yes

+0

我第一次打開'appendonly',我將不得不重新啓動。在那個時候,我將不會丟失數據,因爲直到那時AOF備份纔會存在? –

+0

它應該從RDB重新創建,如果沒有AOF –

+0

@HassanBaig ** NO !!! **你會失去一切。希望你還沒有做到這一點......一旦你在redis.conf中設置了'appendonly yes',並重新啓動Redis,無論文件是否存在,它都會從AOF文件加載數據。如果該文件不存在,它將創建一個空文件,並嘗試從該空文件加載數據。所以你會失去一切。實際上,您不必重新啓動Redis即可打開AOF。相反,你可以使用'config set'命令動態打開它:'config set appendonly yes' –