Redis持久化
Redis是一個內(nèi)存數(shù)據(jù)庫,為了保證數(shù)據(jù)的持久性,它提供了兩種持久化方案:
RDB 方式(默認)
RDB方式是通過快照( snapshotting )完成的,當符合一定條件時Redis會自動將內(nèi)存中的數(shù)據(jù)進行快照并持久化到硬盤。
觸發(fā)快照的時機
- 符合自定義配置的快照規(guī)則 redis.conf
- 執(zhí)行 save 或者 bgsave 命令
- 執(zhí)行 flushall 命令
- 第一次執(zhí)行主從復制操作
原理圖
設置快照保存規(guī)則
快照規(guī)則是配置在 redis.conf 文件中的,我這里我截取對應的代碼片段,給大家看下。
#
# Save the DB on disk:
#
# 持久化操作設置,下面的配置分別表示:900秒內(nèi)至少一個鍵被修改則進行快照,5分鐘內(nèi)至少10個鍵被修改則進行快照,1分鐘內(nèi)10000個鍵被更改則進行快照
save 900 1
save 300 10
save 60 10000
注意事項:
- Redis在進行快照過程中不會修改RDB文件,只有快照結(jié)束后才會將舊的快照文件替換為新的,也就是說任何時候RDB文件都是完成的,不存在中間狀態(tài),保證了數(shù)據(jù)的完整性。
- 我們可以通過定時備份RDB文件來實現(xiàn)Redis數(shù)據(jù)庫的備份,RDB文件是經(jīng)過
壓縮的二進制文件
,占用空間會小于內(nèi)存中的數(shù)據(jù),更加利于傳輸。
RDB優(yōu)缺點
缺點 :使用RDB方式進行持久化,如果看明白了其備份原理圖,則很容易看出 Redis如果異常宕機或者重啟 ,就會丟失最后一次快照之后的所有數(shù)據(jù)修改。這個時候我們就需要根據(jù)具體的應用場景,通過組合設置自動快照條件的方式來將可能發(fā)生的數(shù)據(jù)損失控制在能夠接受范圍。如果數(shù)據(jù)相對來說比較重要,希望將損失降到最小,則可以使用 AOF 方式進行持久化,下面我們會聊到這種方式。
優(yōu)點: RDB最大化了Redis性能,父進程在保存快照生成RDB文件時唯一要做的就是fork出一個子進程,然后這個子進程就會處理接下來的所有文件保存工作,父進程無需執(zhí)行任何磁盤 I/O 操作。同時這也是一個缺點,如果數(shù)據(jù)集比較大的時候,fork可能比較耗時,造成服務器在一段時間內(nèi)會停止處理客戶端請求。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7139瀏覽量
89568 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3055瀏覽量
74325 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3846瀏覽量
64684 -
Redis
+關(guān)注
關(guān)注
0文章
378瀏覽量
10937
發(fā)布評論請先 登錄
相關(guān)推薦
評論