Redis 的持久化有哪幾種方式?

2022-09-21 21:39:19 字數 1754 閱讀 4653

redis 的持久化有哪幾種方式?

不同的持久化機制都有什麼優缺點?

持久化機制具體底層是如何實現的?

redis 如果僅僅只是將資料快取在記憶體裡面,如果 redis 宕機了再重啟,記憶體裡的資料就全部都弄丟了啊。你必須得用 redis 的持久化機制,將資料寫入記憶體的同時,非同步的慢慢的將資料寫入磁碟檔案裡,進行持久化。

如果 redis 宕機重啟,自動從磁碟上載入之前持久化的一些資料就可以了,也許會丟失少許資料,但是至少不會將所有資料都弄丟。

這個其實一樣,針對的都是 redis 的生產環境可能遇到的一些問題,就是 redis 要是掛了再重啟,記憶體裡的資料不就全丟了?能不能重啟的時候把資料給恢復了?

持久化主要是做災難恢復、資料恢復,也可以歸類到高可用的乙個環節中去,比如你 redis 整個掛了,然後 redis 就不可用了,你要做的事情就是讓 redis 變得可用,盡快變得可用。

重啟 redis,盡快讓它對外提供服務,如果沒做資料備份,這時候 redis 啟動了,也不可用啊,資料都沒了。

很可能說,大量的請求過來,快取全部無法命中,在 redis 裡根本找不到資料,這個時候就死定了,出現快取雪崩問題。所有請求沒有在 redis 命中,就會去 mysql 資料庫這種資料源頭中去找,一下子 mysql 承接高併發,然後就掛了...

如果你把 redis 持久化做好,備份和恢復方案做到企業級的程度,那麼即使你的 redis 故障了,也可以通過備份資料,快速恢復,一旦恢復立即對外提供服務。

如果 redis 掛了,伺服器上的記憶體和磁碟上的資料都丟了,可以從雲服務上拷貝回來之前的資料,放到指定的目錄中,然後重新啟動 redis,redis 就會自動根據持久化資料檔案中的資料,去恢復記憶體中的資料,繼續對外提供服務。

如果同時使用 rdb 和 aof 兩種持久化機制,那麼在 redis 重啟的時候,會使用 aof 來重新構建資料,因為 aof 中的資料更加完整。

rdb 會生成多個資料檔案,每個資料檔案都代表了某乙個時刻中 redis 的資料,這種多個資料檔案的方式,非常適合做冷備,可以將這種完整的資料檔案傳送到一些遠端的安全儲存上去,比如說 amazon 的 s3 雲服務上去,在國內可以是阿里雲的 odps 分布式儲存上,以預定好的備份策略來定期備份 redis 中的資料。

rdb 對 redis 對外提供的讀寫服務,影響非常小,可以讓 redis 保持高效能,因為 redis 主程序只需要 fork 乙個子程序,讓子程序執行磁碟 io 操作來進行 rdb 持久化即可。

相對於 aof 持久化機制來說,直接基於 rdb 資料檔案來重啟和恢復 redis 程序,更加快速。

如果想要在 redis 故障時,盡可能少的丟失資料,那麼 rdb 沒有 aof 好。一般來說,rdb 資料快照檔案,都是每隔 5 分鐘,或者更長時間生成一次,這個時候就得接受一旦 redis 程序宕機,那麼會丟失最近 5 分鐘的資料。

rdb 每次在 fork 子程序來執行 rdb 快照資料檔案生成的時候,如果資料檔案特別大,可能會導致對客戶端提供的服務暫停數毫秒,或者甚至數秒。

不要僅僅使用 rdb,因為那樣會導致你丟失很多資料;

也不要僅僅使用 aof,因為那樣有兩個問題:第一,你通過 aof 做冷備,沒有 rdb 做冷備來的恢復速度更快;第二,rdb 每次簡單粗暴生成資料快照,更加健壯,可以避免 aof 這種複雜的備份和恢復機制的 bug;

redis 支援同時開啟開啟兩種持久化方式,我們可以綜合使用 aof 和 rdb 兩種持久化機制,用 aof 來保證資料不丟失,作為資料恢復的第一選擇; 用 rdb 來做不同程度的冷備,在 aof 檔案都丟失或損壞不可用的時候,還可以使用 rdb 來進行快速的資料恢復。

Redis 持久化有幾種方式?

redis 持久化的兩種方式 rdb rdb 持久化機制,是對 redis 中的資料執行週期性的持久化。rdb 優缺點 rdb 會生成多個資料檔案,每個資料檔案都代表了某乙個時刻中 redis 的資料,這種多個資料檔案的方式,非常適合做冷備,可以將這種完整的資料檔案傳送到一些遠端的安全儲存上去,比如...

css定位有哪幾種方式?

相信很多的初學者和我一樣在剛接觸有關浮動和定位都有些搞不清楚,在這裡我將介紹一下我所理解的有關 css的定位方式。在css中浮動主要是解決一些有關布局的左右排列問題,其實定位的作用和浮動的作用差不多,不過區 別是定位用來解決疊加排列的問題。在用定位時,你需要寫position屬性,position ...

JS有哪幾種傳參方式?

我們今天講的傳參是指頁面之間的資料傳遞。傳統的前端開發中,頁面之間是少有引數互動的,甚至沒有,而在如今的前端環境下,乙個稍微正式點的專案都不可能少了頁面間傳參,頁面的跨越 伺服器後台進行資料請求等,都需要乙個或多個傳參的方法。那麼引數在不同的頁面間進行傳遞,乙個頁面的引數被另一頁面使用,如何才能做到...