Redis中有兩種持久化(AOF和RDB),以下這篇文章帶大家了解這兩種持久化,看看它們的優缺點,介紹一下為什麼Redis需要兩種持久化,希望對大家有幫助!
眾所周知,Redis中提供了AOF,RDB兩種持久化,下面先來簡單回顧一下。
SAVE
和後台RDB持久化指令BGSAVE
,前台執行時,Redis的其他指令會被阻斷,而後台執行時,Redis還可以繼續處理客戶端的命令請求。 od
指令可以轉化為可讀。 【相關建議:Redis影片教學】
,意思是追加的持久化方式,其中保存的是寫入指令,而非資料。
緩衝區末端。
函數,將
aof_buf緩衝區中的內容寫入到AOF檔。
指的是檔案寫入到作業系統緩衝區時,是否直接同步到磁碟中。透過配置,可以選擇立即同步、每秒同步、不主動同步而由作業系統控制,這三種同步方式。關於檔案I/O緩衝:
https://www.litreily.top/2018/10/25/io-cache/
重寫,減少重複指令、已失效指令,合併指令等。
子程序的形式實作。子進程帶有伺服器進程的資料副本,再避免使用鎖的情況下確保資料安全性。另外也採用AOF重寫緩衝區解決了資料不一致。
遺失資料多
fork子程序來做BGSAVE
,消耗一定的記憶體資源
丟失資料少
的操作,開啟AOF持久化後,QPS會稍微降低
經過上面的回顧,我們可以看到,RDB與AOF持久化有明顯差異。
儲存的內容:RDB儲存某一時間點的資料;AOF儲存執行的寫入指令。
檔案大小:RDB檔案較小;AOF檔案較大。
#########寫入方式:RDB可採用前台/後台寫入方式;AOF採用每次執行寫入指令,都會將指令存入緩衝區的方式,另外可定期重寫。 ############資料遺失:RDB遺失從宕機到上一次RDB同步之間的所有資料;AOF根據I/O緩衝區所配置的刷新方式,不遺失或遺失1s或幾秒的數據。 ###根據這些對比,可以看到RDB持久化更適合保存一個時間點的數據,當主從複製或資料全量異地災備時,拷貝到其他地方 ,而AOF持久化由於遺失資料較少,比較適合作為本地備份,在Reids掛掉重啟時作為故障恢復。這就是我理解的為什麼Redis需要兩種持久化方式。
更多程式相關知識,請造訪:程式設計入門! !
以上是Redis中的兩種持久化方式,為什麼需要兩種持久化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!