共計(jì) 1587 個(gè)字符,預(yù)計(jì)需要花費(fèi) 4 分鐘才能閱讀完成。
本篇內(nèi)容主要講解“Redis 中的兩種持久化方式是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓丸趣 TV 小編來(lái)帶大家學(xué)習(xí)“Redis 中的兩種持久化方式是什么”吧!
Redis 的兩種持久化方式
眾所周知,Redis 中提供了 AOF,RDB 兩種持久化,下面先來(lái)簡(jiǎn)單回顧一下。
RDB 持久化
RDB 持久化,就是把當(dāng)前時(shí)間點(diǎn)的數(shù)據(jù)庫(kù)的狀態(tài)保存到磁盤(pán)中,又稱(chēng)快照持久化。
RDB 可以手動(dòng)觸發(fā),也可以根據(jù)服務(wù)器配置定期執(zhí)行。
RDB 生成的文件,是一個(gè)經(jīng)過(guò)壓縮的二進(jìn)制文件,數(shù)據(jù)庫(kù)可以通過(guò)該文件還原到該時(shí)間點(diǎn)的狀態(tài)。
Redis 提供前臺(tái) RDB 持久化命令 SAVE 和后臺(tái) RDB 持久化命令 BGSAVE,前臺(tái)執(zhí)行時(shí),Redis 的其他命令會(huì)被阻塞,而后臺(tái)執(zhí)行時(shí),Redis 還可以繼續(xù)處理客戶(hù)端的命令請(qǐng)求。
RDB 二進(jìn)制文件中,保存的是鍵值對(duì)數(shù)據(jù),采用經(jīng)過(guò)壓縮的自定義編碼,帶校驗(yàn)。通過(guò) od 命令可以轉(zhuǎn)化為可讀。
主從復(fù)制時(shí),初始化的全量復(fù)制采用 RDB 文件。
【相關(guān)推薦:Redis 視頻教程】
AOF 持久化
AOF 持久化,全稱(chēng)是 Appen Only File,意思是追加的持久化方式,其中保存的是寫(xiě)命令,而非數(shù)據(jù)。
AOF 持久化過(guò)程分為命令追加、文件寫(xiě)入、文件同步三個(gè)步驟。
命令追加:Redis 服務(wù)端每執(zhí)行完一個(gè)寫(xiě)命令,都會(huì)以 AOF 協(xié)議格式將該寫(xiě)命令追加到服務(wù)器狀態(tài)的 aof_buf 緩沖區(qū)末尾。
文件寫(xiě)入:Redis 中,每結(jié)束一個(gè)事件循環(huán)之前,都會(huì)調(diào)用 flushAppendOnlyFile 函數(shù),將 aof_buf 緩沖區(qū)中的內(nèi)容寫(xiě)入到 AOF 文件。
文件同步:同步 sync 指的是文件寫(xiě)入到操作系統(tǒng)緩沖區(qū)中時(shí),是否直接同步到磁盤(pán)中。通過(guò)配置,可以選擇立即同步、每秒同步、不主動(dòng)同步而由操作系統(tǒng)控制,這三種同步方式。關(guān)于文件 I / O 緩沖:https://www.litreily.top/2018/10/25/io-cache/
Redis 優(yōu)先使用 AOF 文件來(lái)恢復(fù)數(shù)據(jù)。
AOF 文件由于存儲(chǔ)命令,且沒(méi)有經(jīng)過(guò)壓縮,其體積要大于 RDB 文件。
AOF 文件可以定期采用 BGREWRITEAOF 重寫(xiě),減少重復(fù)命令、已失效命令,合并命令等。
AOF 文件支持后臺(tái)重寫(xiě),采用 fork 子進(jìn)程的形式實(shí)現(xiàn)。子進(jìn)程帶有服務(wù)器進(jìn)程的數(shù)據(jù)副本,再避免使用鎖的情況下保證數(shù)據(jù)安全性。另外也采用 AOF 重寫(xiě)緩沖區(qū)解決了數(shù)據(jù)不一致。
兩種持久化分別的優(yōu)缺點(diǎn) RDB 的優(yōu)點(diǎn)
文件體積小,適合拷貝做冷備
相比 AOF,備份恢復(fù)速度更快
RDB 的缺點(diǎn)
丟失數(shù)據(jù)多
fork 子進(jìn)程來(lái)做 BGSAVE,消耗一定的內(nèi)存資源
AOF 的優(yōu)點(diǎn)
丟失數(shù)據(jù)少
增加了寫(xiě)緩沖區(qū),無(wú)需尋址,速度快
append-only,也無(wú)需做磁盤(pán)尋址,效率高
AOF 的缺點(diǎn)
文件體積大
AOF 每次都需要做一下寫(xiě)入 aof_buf 的操作,開(kāi)啟 AOF 持久化后,QPS 會(huì)略微降低
Redis 為什么需要兩種持久化?
經(jīng)過(guò)上面的回顧,我們可以看到,RDB 與 AOF 持久化有明顯區(qū)別。
存儲(chǔ)的內(nèi)容:RDB 存儲(chǔ)某一時(shí)間點(diǎn)的數(shù)據(jù);AOF 存儲(chǔ)執(zhí)行的寫(xiě)命令。
文件大小:RDB 文件較小;AOF 文件較大。
寫(xiě)入方式:RDB 可采用前臺(tái) / 后臺(tái)寫(xiě)入方式;AOF 采用每次執(zhí)行寫(xiě)命令,都將命令存入緩沖區(qū)的方式,另外可定期重寫(xiě)。
數(shù)據(jù)丟失:RDB 丟失從宕機(jī)到上一次 RDB 同步之間的所有數(shù)據(jù);AOF 根據(jù) I / O 緩沖區(qū)所配置的刷新方式,不丟失或丟失 1s 或幾秒的數(shù)據(jù)。
根據(jù)這些對(duì)比,可以看到 RDB 持久化更適合保存一個(gè)時(shí)間點(diǎn)的數(shù)據(jù),在主從復(fù)制或者數(shù)據(jù)全量異地災(zāi)備時(shí),拷貝到其他地方,而 AOF 持久化由于丟失數(shù)據(jù)較少,比較適合作為本地備份,在 Reids 掛掉重啟時(shí)作為故障恢復(fù)。這就是我理解的為什么 Redis 需要兩種持久化方式。
到此,相信大家對(duì)“Redis 中的兩種持久化方式是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是丸趣 TV 網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!