溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis有幾種數據持久化方式

發布時間:2020-06-23 21:23:21 來源:億速云 閱讀:260 作者:元一 欄目:關系型數據庫

今天就跟大家聊聊有關redis的數據持久化方式,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

redis提供了兩種數據持久化的方式,分別是RDB(Redis DataBase)和AOF(Apend Only File)。

Redis 是一種內存數據庫,將數據保存在內存中,讀寫效率要比傳統的將數據保存在磁盤上的數據庫要快很多。但是一旦進程退出,Redis 的數據就會丟失。

為了解決這個問題,Redis 提供了 RDB 和 AOF 兩種持久化方案,將內存中的數據保存到磁盤中,避免數據丟失。

RDB方式

RDB方式是一種快照式的持久化方法,將某一時刻的數據持久化到磁盤中。

redis在進行數據持久化的過程中,會先將數據寫入到一個臨時文件中,待持久化過程都結束了,才會用這個臨時文件替換上次持久化好的文件。正是這種特性,讓我們可以隨時來進行備份,因為快照文件總是完整可用的。

對于RDB方式,redis會單獨創建(fork)一個子進程來進行持久化,而主進程是不會進行任何IO操作的,這樣就確保了redis極高的性能。

如果需要進行大規模數據的恢復,且對于數據恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

RDB 觸發機制分為使用指令手動觸發和 redis.conf 配置自動觸發。

手動觸發 Redis 進行 RDB 持久化的指令的為:

save ,該指令會阻塞當前 Redis 服務器,執行 save 指令期間,Redis 不能處理其他命令,直到 RDB 過程完成為止。

bgsave,執行該命令時,Redis 會在后臺異步執行快照操作,此時 Redis 仍然可以相應客戶端請求。具體操作是 Redis 進程執行 fork 操作創建子進程,RDB 持久化過程由子進程負責,完成后自動結束。Redis 只會在 fork 期間發生阻塞,但是一般時間都很短。但是如果 Redis 數據量特別大, fork 時間就會變長,而且占用內存會加倍,這一點需要特別注意。

AOF方式

AOF方式是將執行過的寫指令記錄下來,在數據恢復時按照叢前到后的順序再將指令執行一遍。

AOF命令以redis協議追加保存每次寫的操作到文件末尾。Redis還能對AOF文件進行后臺重寫,使得AOF文件的體積不至于過大。

默認的AOF持久化策略是每秒鐘fsync一次(fsync是指把緩存中的寫指令記錄到磁盤中),因為在這種情況下,redis仍然可以保持很好的處理性能,即使redis故障,也只會丟失最近1秒鐘的數據。

如果在追加日志時,恰好遇到磁盤空間滿、inode滿或斷電等情況導致日志寫入不完整,也沒有關系,redis提供了redis-check-aof工具,可以用來進行日志修復。

因為采用了追加方式,如果不做任何處理的話,AOF文件會變得越來越大,為此,redis提供了AOF文件重寫(rewrite)機制,即當AOF文件的大小超過所設定的閾值時,redis就會啟動AOF文件的內容壓縮,只保留可以恢復數據的最小指令集。

舉個例子或許更形象,假如我們調用了100次INCR指令,在AOF文件中就要存儲100條指令,但這明顯是很低效的,完全可以把這100條指令合并成一條SET指令,這就是重寫機制的原理。

在進行AOF重寫時,仍然是采用先寫臨時文件,全部完成后再替換的流程,所以斷電、磁盤滿等問題都不會影響AOF文件的可用性。

看完上述內容,你們對redis兩種數據持久化方式有進一步的了解嗎?如果還想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女