您好,登錄后才能下訂單哦!
本篇內容主要講解“Redis中的兩種持久化方式是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Redis中的兩種持久化方式是什么”吧!
眾所周知,Redis中提供了AOF,RDB兩種持久化,下面先來簡單回顧一下。
RDB持久化,就是把當前時間點的數據庫的狀態保存到磁盤中,又稱快照持久化。
RDB可以手動觸發,也可以根據服務器配置定期執行。
RDB生成的文件,是一個經過壓縮的二進制文件,數據庫可以通過該文件還原到該時間點的狀態。
Redis提供前臺RDB持久化命令SAVE
和后臺RDB持久化命令BGSAVE
,前臺執行時,Redis的其他命令會被阻塞,而后臺執行時,Redis還可以繼續處理客戶端的命令請求。
RDB二進制文件中,保存的是鍵值對數據,采用經過壓縮的自定義編碼,帶校驗。通過od
命令可以轉化為可讀。
主從復制時,初始化的全量復制采用RDB文件。
【相關推薦:Redis視頻教程】
AOF持久化,全稱是Appen Only File
,意思是追加的持久化方式,其中保存的是寫命令,而非數據。
AOF持久化過程分為命令追加、文件寫入、文件同步三個步驟。
命令追加:Redis服務端每執行完一個寫命令,都會以AOF協議格式將該寫命令追加到服務器狀態的aof_buf
緩沖區末尾。
文件寫入:Redis中,每結束一個事件循環之前,都會調用flushAppendOnlyFile
函數,將aof_buf
緩沖區中的內容寫入到AOF文件。
文件同步:同步sync
指的是文件寫入到操作系統緩沖區中時,是否直接同步到磁盤中。通過配置,可以選擇立即同步、每秒同步、不主動同步而由操作系統控制,這三種同步方式。關于文件I/O緩沖:https://www.litreily.top/2018/10/25/io-cache/
Redis優先使用AOF文件來恢復數據。
AOF文件由于存儲命令,且沒有經過壓縮,其體積要大于RDB文件。
AOF文件可以定期采用BGREWRITEAOF
重寫,減少重復命令、已失效命令,合并命令等。
AOF文件支持后臺重寫,采用fork
子進程的形式實現。子進程帶有服務器進程的數據副本,再避免使用鎖的情況下保證數據安全性。另外也采用AOF重寫緩沖區解決了數據不一致。
文件體積小,適合拷貝做冷備
相比AOF,備份恢復速度更快
丟失數據多
fork子進程來做BGSAVE
,消耗一定的內存資源
丟失數據少
增加了寫緩沖區,無需尋址,速度快
append-only,也無需做磁盤尋址,效率高
文件體積大
AOF每次都需要做一下寫入aof_buf
的操作,開啟AOF持久化后,QPS會略微降低
經過上面的回顧,我們可以看到,RDB與AOF持久化有明顯區別。
存儲的內容:RDB存儲某一時間點的數據;AOF存儲執行的寫命令。
文件大小:RDB文件較小;AOF文件較大。
寫入方式:RDB可采用前臺/后臺寫入方式;AOF采用每次執行寫命令,都將命令存入緩沖區的方式,另外可定期重寫。
數據丟失:RDB丟失從宕機到上一次RDB同步之間的所有數據;AOF根據I/O緩沖區所配置的刷新方式,不丟失或丟失1s或幾秒的數據。
根據這些對比,可以看到RDB持久化更適合保存一個時間點的數據,在主從復制或者數據全量異地災備時,拷貝到其他地方,而AOF持久化由于丟失數據較少,比較適合作為本地備份,在Reids掛掉重啟時作為故障恢復。這就是我理解的為什么Redis需要兩種持久化方式。
到此,相信大家對“Redis中的兩種持久化方式是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。