Redis-16Redis備份(持久化)
文章目錄

概述
Redis持久化的默認(rèn)配置
Redis兩種持久化方式的配置
RDB 快照的原理及配置
AOF追加文件的配置
概述
在 Redis 中存在兩種方式的備份 :
RDB 快照(snapshotting), 它是備份當(dāng)前瞬間 Redis在內(nèi)存中的數(shù)據(jù)記錄。Redis的默認(rèn)方式。采用RDB持久化時(shí)服務(wù)器只會(huì)保存一個(gè)RDB文件,方便維護(hù)。
AOF 只追加文件( Append-Only File , AOF ) , 其作用就是當(dāng) Redis執(zhí)行寫命令后,在一定的條件下將執(zhí)行過的寫命令依次保存在 Redis 的文件中 , 將來就可以依次執(zhí)行那些保存的命令恢復(fù) Redis 的數(shù)據(jù)了。
對(duì)于RDB 快照備份而言, 如果當(dāng)前 Redis 的數(shù)據(jù)量大,備份可能造成 Redis 卡頓,但是恢復(fù)重啟是 比較快速的
對(duì)于 AOF 備份而言,它只是追加寫入命令,所以備份一般不會(huì)造成 Redis 卡頓 , 但是恢復(fù)重啟要執(zhí)行更多 的命令,備份文件可能也很大 , 這是要注意的地方
在 Redis 中允許使用其中的一種、同時(shí)使用兩種,或者兩種都不用,所以具體使用何種方式進(jìn)行備份和持久化是用戶可以通過配置決定的
Redis持久化的默認(rèn)配置
################################ SNAPSHOTTING ################################ save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbchecksum yes dbfilename dump.rdb ############################## APPEND ONLY MODE ############################## appendonly no appendfilename "appendonly.aof" # appendfsync always appendfsync everysec # appendfsync no .. no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Redis兩種持久化方式的配置
RDB 快照的原理及配置
RDB 快照原理:redis主進(jìn)程fork一個(gè)子進(jìn)程,fork出來的子進(jìn)程將內(nèi)存的數(shù)據(jù)集dump到臨時(shí)的RDB中,當(dāng)子進(jìn)程對(duì)臨時(shí)的RDB文件寫入完畢,redis用新的RDB文件代替舊的RDB文件。
save 900 1 save 300 10 save 60 10000
1
2
3
4
這 3 個(gè)配置項(xiàng)的含義分別為 :
當(dāng) 900 秒執(zhí)行 1 個(gè)寫命令時(shí),啟用快照備份。
當(dāng) 300 秒執(zhí)行 10 個(gè)寫命令時(shí),啟用快照備份 。
當(dāng) 60 秒內(nèi)執(zhí)行 10000 個(gè)寫命令時(shí),啟用快照備份。
上面的配置的意思是,當(dāng)你重啟服務(wù)器時(shí)數(shù)據(jù)是可能會(huì)丟失的,如果數(shù)據(jù)量小的時(shí)候,你會(huì)丟失5分鐘以內(nèi)的數(shù)據(jù);如果數(shù)據(jù)量大的時(shí)候,你會(huì)丟失一分鐘以內(nèi)的數(shù)據(jù)。如果想避免這種情況發(fā)生,那么可以save后重啟服務(wù)器。一般我們都是應(yīng)對(duì)突發(fā)狀況,所以手工執(zhí)行是比較雞肋的做法。
stop-writes - on-bgsave- error yes
1
Redis 執(zhí)行 save 命令的時(shí)候,將禁止寫入命令。
bgsave 命令,它是一個(gè)異步保存命令,也就是系統(tǒng)將啟動(dòng)另外一條進(jìn)程,
把 Redis 的數(shù)據(jù)保存到對(duì)應(yīng)的數(shù)據(jù)文件中 。它和 save 命令最大的不同是它不會(huì)阻塞客戶端的寫入,也就是在執(zhí)行 bgsave 的時(shí)候,允許客戶端繼續(xù)讀/寫 redis。
在默認(rèn)情況下,如國(guó)Redis 執(zhí)行 bgsave 失敗后, Redis 將停止接受寫操作,這樣以一種強(qiáng)硬的方式讓用戶知道數(shù)據(jù)不能正確的持久化到磁盤 , 否則就會(huì)沒人注意到災(zāi)難的發(fā)生,如果后臺(tái)保存進(jìn)程重新啟動(dòng)工作了, Redis 也將自動(dòng)允許寫操作。然而如果安裝了靠譜的監(jiān)控,可能不希望 Redis 這樣做,那么你可以將其修改為 no 。
rdbchecksum yes
1
這個(gè)命令意思是是否對(duì) rbd 文件進(jìn)行檢驗(yàn),如果是將對(duì) rdb 文件檢驗(yàn)。從 dbfilename
的配置可 以知道, rdb 文件實(shí)際是 Redis 持久化的數(shù)據(jù)文件 。
dbfilename dump.rdb
1
它是數(shù)據(jù)文件。當(dāng)采用快照模式備份(持久化)時(shí), Redis 將使用它保存數(shù)據(jù),將來可以使用它恢復(fù)數(shù)據(jù) …
AOF追加文件的配置
appendonly no
1
如果 appendonly 配置為 no,則不啟用 AOF 方式進(jìn)行備份。如果 appendonly 配置為 yes,則以 AOF 方式備份 Redis 數(shù)據(jù),那么此時(shí) Redis 會(huì)按照配置,在特定的時(shí)候執(zhí)行追加命令,用以備份數(shù)據(jù)。
appendfilename "appendonly.aof"
1
這里定義追加 的寫入文件為 appendonly.aof, 采用 AOF 追加文件備份的時(shí)候命令都會(huì)寫到這里。
# appendfsync always appendfsyn everysec # appendfsync no
1
2
3
4
AOF 文件和 Redis 命令是同步頻率的 , 假設(shè)配置為 always , 其含義為當(dāng) Red is 執(zhí)行命令的時(shí)候,則 同時(shí)同步到 AOF 文件 , 這樣會(huì)使得 Redis 同步刷新 AOF 文件, 造成緩慢。
采用 no 的時(shí)候,則 由客戶端調(diào)用命令執(zhí)行備份, Redis 本身不備份文件。
對(duì)于采用 always 配置的時(shí)候 , 每次命令都會(huì)持久化,它的好處在于安全,壞處在于每次都持久化性能較差。采用 eva可sec 則每秒同步 , 安全性不如 always , 備份可能會(huì)丟失1秒 以內(nèi)的命令 , 但是隱患也不大 , 安全度 尚可,性能可以得到保障。采用 no , 則性能有所保障 , 但是由于失去備份, 所 以安全性 比較差。建議采用默認(rèn)配置everysec , 這樣在保證性能的同時(shí),也在一定程度上保證了 安全性。
no-appendfsync-on-rewrite no
1
它指定是否在后臺(tái) AOF 文件 rewrite (重寫)期間調(diào)用 fsync , 默認(rèn)為 no , 表示要調(diào)用fsync (無論后臺(tái)是否有子進(jìn)程在刷盤)。 Redis 在后臺(tái)寫 RDB 文件或重寫 AOF 文件期間會(huì)存在大量磁盤I/O , 此時(shí), 在某些 Linux 系統(tǒng)中 ,調(diào)用 fsync 可能會(huì)阻塞。
auto-aof-rewrite- percentage 100
1
它指定 Redis 重寫 AOF 文件的條件 , 默認(rèn)為 100,表示與上次 rewrite 的 AOF 文件大小相比,當(dāng)前 AOF 文件增長(zhǎng)量超過上次 AOF 文件大小的 100%時(shí),就會(huì)觸發(fā) backgroundrewrite 。若配置為 0 , 則會(huì)禁用自動(dòng) rewrite 。
auto-aof-rewrite-min-size 64mb
1
它指定觸發(fā) rewrite 的 AOF 文件大小 。若 AOF 文件小于該值,即使當(dāng)前文件的增量比例達(dá)到 auto-aof-rewrite-percentage 的配置值,也不會(huì)觸發(fā)自動(dòng) rewrite 。即這兩個(gè)配置項(xiàng)同時(shí)滿足時(shí),才會(huì)觸發(fā) rewrite.
aof- load- truncated yes
1
Redis 在恢復(fù)時(shí)會(huì)忽略最后一條可能存在 問題的指令 , 默認(rèn)為 yes 。 即在 AOF 寫入時(shí),可能存在指令寫錯(cuò)的問題(突然斷 電、寫了一半) , 這種情況下 yes 會(huì) log 并繼續(xù),而 no會(huì)直接恢復(fù)失敗 。
Redis 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。