首頁 >資料庫 >Redis >Redis持久化機制實作原理與流程是什麼

Redis持久化機制實作原理與流程是什麼

WBOY
WBOY轉載
2023-06-02 21:43:50914瀏覽

Redis持久化機制實作原理是什麼?

持久化:Redis是記憶體資料庫,資料都是儲存在記憶體中,為了避免進程退出導致資料的永久遺失,需要定期將Redis中的資料以某種形式(資料或指令)從記憶體保存到硬碟;當下次Redis重啟時,利用持久化檔案實現資料恢復。除此之外,為了進行災難備份,可以將持久化檔案拷貝到一個遠端位置

持久化流程是什麼?

既然redis的資料可以保存在磁碟上,那麼這個流程是什麼樣的呢?

要有下面五個過程:

(1)客戶端向服務端發送寫入操作(資料在客戶端的記憶體中)。

(2)資料庫服務端接收到寫入請求的資料(資料在服務端的記憶體中)。

(3)服務端調用write這個系統調用,將資料往磁碟上寫(資料在系統記憶體的緩衝區中)。

(4)作業系統將緩衝區中的資料轉移到磁碟控制器上(資料在磁碟快取中)。

(5)磁碟控制器將資料寫到磁碟的實體媒體中(資料真正落到磁碟上)。

這5個過程是在理想條件下一個正常的保存流程,但是在大多數情況下,我們的機器等等都會有各種各樣的故障,這裡劃分了兩種情況:

Redis資料庫發生故障,只要在上面的第三步執行完畢,那麼就可以持久化保存,剩下的兩步驟由作業系統替我們完成;作業系統發生故障,必須上面5步都完成才可以。

為應對以上5步驟操作,redis提供了兩種不同的持久化方式:RDB(Redis DataBase)和AOF(Append Only File)

由於需要進行fork操作,RDB的快照和AOF的重寫對Redis造成了阻塞,這是一個非常耗費資源的操作。因此為了不影響Redis主進程響應,我們需要盡可能降低阻塞。

1.降低fork的頻率,例如可以手動來觸發RDB產生快照、與AOF重寫;

2.控制Redis最大使用內存,防止fork耗時過長;

3.使用更屌的硬體;

4.合理地配置Linux的記憶體分配策略,避免因為物理記憶體不足導致fork失敗

##在線上實務經驗:

1.如果Redis中的資料並不是特別敏感或可以透過其它方式重寫產生數據,可以關閉持久化,如果遺失資料可以透過其它途徑補回;

2.自己制定策略定期檢查Redis的情況,然後可以手動觸發備份、重寫資料;

3.可以加入主從機器,利用一台從機器進行備份處理,其它機器正常響應客戶端的指令;

4.RDB持久化與AOF持久化可以同時存在,搭配使用。

以上是Redis持久化機制實作原理與流程是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除