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