redis 用於避免資料丟失的 aof 方法。這個方法通過逐一記錄操作命令,在恢復時再逐一執行命令的方式,保證了資料的可靠性。這個方法看似「簡單」,但也是充分考慮了對 redis 效能的影響。
總結來說,它提供了 aof 日誌的三種寫回策略,分別是 always、everysec 和 no,這三種策略在可靠性上是從高到低,而在效能上則是從低到高。此外,為了避免日誌檔案過大,redis 還提供了 aof 重寫機制,直接根據資料庫裡資料的最新狀態,生成這些資料的插入命令,作為新日誌。這個過程通過後台執行緒完成,避免了對主線程的阻塞。
其中,三種寫回策略體現了系統設計中的乙個重要原則 ,即 trade-off,或者稱為「取捨」,指的就是在效能和可靠性保證之間做取捨.落盤時機和重寫機制都是在「記日誌」這一過程中發揮作用的。例如,落盤時機的選擇可以避免記日誌時阻塞主線程,重寫可以避免日誌檔案過大。但是,在「用日誌」的過程中,也就是使用 aof 進行故障恢復時,我們仍然需要把所有的操作記錄都執行一遍。再加上 redis 的單執行緒設計,這些命令操作只能一條一條按順序執行,這個「重放」的過程就會很慢了。
突發宕機,Kafka寫入的資料如何保證不丟失?
我們暫且不考慮寫磁碟的具體過程,先大致看看下面的圖,這代表了 kafka 的核心架構原理。kafka 分布式儲存架構 那麼現在問題來了,如果每天產生幾十 tb 的資料,難道都寫一台機器的磁碟上嗎?這明顯是不靠譜的啊!所以說,這裡就得考慮資料的分布式儲存了,我們結合 kafka 的具體情況來說說。在 ...
Redis如何保證系統宕機資料不會丟失
我們都知道 redis 的資料全部在記憶體裡,如果突然宕機,資料就會全部丟失,因此必須有一種機制來保證 redis 的資料不會因為故障而丟失,這種機制就是 redis 的持久化機制。如圖1.1所示,redis 的持久化機制有兩種,第一種是快照,第二種是 aof 日誌。快照是一次全量備份,aof 日誌...
Redis資料庫 如何避免網路延遲問題?
我們知道redis協議是構建在tcp協議之上的。所以當我們在指令碼中呼叫redis時,通常是以傳送 應答 再傳送 再應答的模式進行的,而每一次傳送與應答,都需要資料從客戶端到服務端飛一次。而且,這一切都是預設的。當你需要使用redis處理多個命令時,這樣時間都消耗到網路延遲上可能就不划算了,下面是幾...