Redis學習(三) —— 持久化

1、兩個問題

  • 爲何要持久化
  • 如何持久化

1.1 爲何要持久化?

由於Redis數據存在內存,若服務器宕機或重啓,數據會所有丟失,須要有一種機制保證數據不會由於故障丟失。html

Redis是單線程的,而持久化就是說Redis須要將線程用到保存數據到磁盤,而且還要服務客戶端的請求,持久化的IO會嚴重影響性能。面試

那麼Redis是如何解決的?redis

這裏Redis使用了操做系統的 寫時複製(Copy On Write)。也就是從原先處理客戶端請求的進程中,fork出一個子進程,來進行持久化。數據庫

1.2 如何持久化?

  • 快照
  • AOF日誌

2、Copy On Write

fork()函數

父進程執行fork()後,會產生一個子進程。當fork()被調用的時候,會返回兩個值。緩存

爲何返回兩個值?
由於是兩個線程,返回給父線程,子線程的ID;返回給子線程,0。服務器

exec()函數

exec的做用是,替換當前進程的內存空間的映像,從而執行不一樣的任務。函數

也就是說,當子進程執行exec後,就再也不是父進程的副本了,由於有了獨立的內存空間。性能

Copy On Write

參考文檔

[1]: Redis官方文檔 持久化(persistence)
[2]: 一個經典面試題:如何保證緩存與數據庫的雙寫一致性?
[3]: 你的Redis怎麼持久化的
[4]: COW奶牛!Copy On Write機制瞭解一下操作系統

相關文章
相關標籤/搜索