- 注意: 撰寫本文目的主要是為了給自己做一個(gè)備忘錄,如果你學(xué)過(guò)Redis并且希望從本文中找到一些忘記的知識(shí)點(diǎn),那么你可以閱讀本文章。由于文章內(nèi)講解并不是很多,因此此文章并不適合小白入門使用。
1.Redis簡(jiǎn)介
-
官網(wǎng)介紹:
在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤,也就是行話講的Snapshot快照,它恢復(fù)時(shí)是將快照文件直接讀到內(nèi)存里。 -
Redis是什么:
Redis會(huì)單獨(dú)創(chuàng)建(fork)一個(gè)子進(jìn)程來(lái)進(jìn)行持久化,會(huì)先將數(shù)據(jù)寫入到一個(gè)臨時(shí)文件中,待持久化過(guò)程都結(jié)束了,再用這個(gè)臨時(shí)文件替換上次持久化好的文件。整個(gè)過(guò)程中,主進(jìn)程是不進(jìn)行任何IO操作的,這就確保了極高的性能。如果需要進(jìn)行大規(guī)模數(shù)據(jù)的恢復(fù),且對(duì)于數(shù)據(jù)恢復(fù)的完整性不是很敏感,那RDB方式要比AOP方式更加的高效。RDB的缺點(diǎn)是最后一次持久化后的數(shù)據(jù)可能丟失。 -
Fork:
Fork的作用是復(fù)制一個(gè)與當(dāng)前進(jìn)程一樣的進(jìn)程。新進(jìn)程的所有數(shù)據(jù)(變量、環(huán)境變量、程序計(jì)數(shù)器)數(shù)值都和原進(jìn)程一致,但是是一個(gè)全新的進(jìn)程,并作為原進(jìn)程的子進(jìn)程。
2.RDB(Redis DataBase)
RDB存儲(chǔ):
- RDBRedis會(huì)將數(shù)據(jù)存儲(chǔ)在dump.rdb文件中。
- 如果使用shutdown或者系統(tǒng)突然崩潰或關(guān)機(jī)使得Redis突然停止工作時(shí),Redis會(huì)將此時(shí)表中的數(shù)據(jù)保存至dump.rdb文件中,執(zhí)行一次save操作。
- 當(dāng)滿足save條件時(shí)(規(guī)定時(shí)間內(nèi)操作了指定次數(shù):插入、刪除、更新,不包括get),Redis會(huì)將表中的數(shù)據(jù)保存至dump.rdb文件中,也會(huì)執(zhí)行save操作。save操作執(zhí)行條件如下(
save 秒鐘 寫操作次數(shù)):
isave執(zhí)行條件
Redis.conf中Snapshot相關(guān)配置:

- 直接輸入save可以立即執(zhí)行備份。
禁用:
- 如果想禁用RDB持久化策略,只要不設(shè)置任何save指令,或者給save傳入一個(gè)空字符串也可以
Stop-writes-on-bgsave-error

rdbcompression壓縮

如何觸發(fā)RDB快照:
- 配置文件中默認(rèn)的快照配置。
冷拷貝直接使用,可以cp dump.rdb dump_new.rdb - 命令save或是bgsave。
1.Save:save時(shí)只管保存,其他不管,全部阻塞。
2.BGSAVE:Redis會(huì)在后臺(tái)異步進(jìn)行快照操作,快照同時(shí)還可以響應(yīng)客戶端請(qǐng)求。可以通過(guò)lastsave命令獲取最后一次成功執(zhí)行快照的時(shí)間。 - 執(zhí)行flushall命令,也會(huì)產(chǎn)生dump.rdb文件,但里面是空的,無(wú)意義。
如何恢復(fù):
- 將備份文件(dump.rdb)移動(dòng)到redis安裝目錄并啟動(dòng)服務(wù)即可。
- CONFIG GET dir獲取目錄。
優(yōu)勢(shì):
- 適合大規(guī)模的數(shù)據(jù)恢復(fù)。
- 對(duì)數(shù)據(jù)完整性和一致性要求不高。
劣勢(shì):
- 在一定間隔時(shí)間做一次備份,所以如果redis意外down掉的話,就會(huì)失去最后一次快照后的所有修改。
- Fork的時(shí)候,內(nèi)存中的數(shù)據(jù)被克隆了一份,大致2倍的碰著性需要考慮。
如何停止:
- 動(dòng)態(tài)所有停止RDB保存規(guī)則的方法:redis-cli config set save ""
3.AOF(Append Only File)
3.1.是什么
- 以日志的形式來(lái)記錄每個(gè)文件寫操作,將Redis執(zhí)行過(guò)的所有寫指令記錄下來(lái)(讀操作不記錄),只許追加文件但不可以改寫文件,redis啟動(dòng)之初會(huì)讀取該文件重新構(gòu)建數(shù)據(jù),換言之,redis重啟的話就根據(jù)日志文件的內(nèi)容將指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復(fù)工作。
3.2.AOF配置文件

3.3.注意事項(xiàng)
- 自動(dòng)生成的aof配置文件最后會(huì)有FLUSHALL指令,即加載完所有的數(shù)據(jù)恢復(fù)工作之后,會(huì)執(zhí)行FLUSHALL清空指令。
- 若AOF配置中包含非法語(yǔ)句,則Redis-server會(huì)啟動(dòng)失敗。此時(shí),可以使用redis-check-aof --fix 文件名稱來(lái)排查文件中的錯(cuò)誤。
3.4.配置位置
- appendonly no:默認(rèn)是no,yes就打開aof持久化。
3.5.APPEND ONLY MODE追加
- appendonly:
- appendfilename:
-
Appendfsync:
1.Always:同步持久化 每次發(fā)生數(shù)據(jù)變更會(huì)被立即記錄到磁盤 性能較差且數(shù)據(jù)完整性比較好。
2.Everysec:出廠默認(rèn)推薦,異步操作,每秒紀(jì)錄 如果一秒內(nèi)宕機(jī),有數(shù)據(jù)丟失。
3.No** - No-appendfsync-on-rewrite :重寫時(shí)是否可以運(yùn)用Appendfsync,用默認(rèn)no即可,保證數(shù)據(jù)安全性。
- Auto-aof-rewrite-min-size:設(shè)置重寫的基準(zhǔn)值
- Auto-aof-rewrite-percentage:設(shè)置重寫的基準(zhǔn)值
3.6.AOF啟動(dòng)/修復(fù)/恢復(fù)
-
正?;謴?fù):
1.啟動(dòng):修改默認(rèn)的appendonly no.,改為yes。
2.將所有數(shù)據(jù)的aof文件復(fù)制一份保存到對(duì)應(yīng)目錄(config get dir)
3.恢復(fù):重啟redis然后重新加載 -
異?;謴?fù):
1.啟動(dòng):設(shè)置Yes
2.備份被寫壞的AOF文件
3.Redis-check-aof --fix進(jìn)行修復(fù)
4.重啟redis然后重新加載
3.7.Rewrite
是什么:
AOF采用文件追加方式,文件會(huì)越來(lái)越大,為避免出現(xiàn)此情況,新增了重寫機(jī)制,當(dāng)AOF文件的大小超過(guò)所有設(shè)定的閾值時(shí),Redis就會(huì)啟動(dòng)AOF文件的內(nèi)容壓縮,只保留可以恢復(fù)數(shù)據(jù)的最小指令集,可以使用命令bgrewriteaof
重寫原理
- AOF文件持續(xù)增長(zhǎng)而過(guò)大時(shí),會(huì)fork出一條新進(jìn)程來(lái)將文件重寫(也是先寫臨時(shí)文件最后再rename),遍歷新進(jìn)程的內(nèi)存中數(shù)據(jù),每條記錄有一條的Set語(yǔ)句,重寫aof文件的操作,并沒(méi)有讀取舊的aof文件,而是將整個(gè)內(nèi)存中的數(shù)據(jù)庫(kù)內(nèi)容用命令的方式重寫了一個(gè)新的aof文件,這點(diǎn)和快照有點(diǎn)類似。
觸發(fā)機(jī)制
- Redis會(huì)記錄上次重寫時(shí)的AOF大小,默認(rèn)配置是當(dāng)AOF文件大小是上次rewrite后大小的一倍且文件大于64M時(shí)觸發(fā)。
3.8.優(yōu)勢(shì)
- 每秒同步:appendfsync always 同步持久化 每次發(fā)生數(shù)據(jù)變更會(huì)被立即記錄到磁盤 性能較差且數(shù)據(jù)完整性比較好。
- 每修改同步:appendfsync everysec 出廠默認(rèn)推薦,異步操作,每秒紀(jì)錄 如果一秒內(nèi)宕機(jī),有數(shù)據(jù)丟失。
- 不同步:appendfsync no 從不同步
3.9.劣勢(shì)
- 相同數(shù)據(jù)集的數(shù)據(jù)而言aof文件要遠(yuǎn)大于rdb文件,恢復(fù)速度慢于rdb
- Aof運(yùn)行效率要慢于rdn,每秒同步策略效果較好,不同步效率和rdb相同
3.10.總結(jié)

性能建議:

文集推薦:
Java基礎(chǔ)方法集1
Python基礎(chǔ)知識(shí)完整版
Spring Boot學(xué)習(xí)筆記
Linux指令進(jìn)階
Java高并發(fā)編程
SpringMVC基礎(chǔ)知識(shí)進(jìn)階
Mysql基礎(chǔ)知識(shí)完整版
健康管理系統(tǒng)學(xué)習(xí)花絮(學(xué)習(xí)記錄)
Node.js基礎(chǔ)知識(shí)(隨手筆記)
MongoDB基礎(chǔ)知識(shí)
Dubbo學(xué)習(xí)筆記
Vue學(xué)習(xí)筆記(隨手筆記)
聲明:發(fā)表此文是出于傳遞更多信息之目的。若有來(lái)源標(biāo)注錯(cuò)誤或侵犯了您的合法權(quán)益,請(qǐng)作者持權(quán)屬證明與本我們(QQ:981086665;郵箱:981086665@qq.com)聯(lián)系聯(lián)系,我們將及時(shí)更正、刪除,謝謝。
