這篇文章主要介紹了redis持久化AOF的特點(diǎn)有哪些,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的文昌網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
特點(diǎn):
以日志的形式來(lái)記錄每個(gè)寫操作,將Redis執(zhí)行過(guò)的所有寫指令記錄下來(lái)(讀操作不記錄),只許追加文件但不可以改寫文件,redis啟動(dòng)之初會(huì)讀取該文件重新構(gòu)建數(shù)據(jù),換言之,redis重啟的話根據(jù)日志文件的內(nèi)容將寫指令從前到后執(zhí)行一次已完成數(shù)據(jù)的恢復(fù)工作。
AOF保存的是appendonly.aof文件
配置:
appendonly no :默認(rèn)關(guān)閉appendonly 模式 yes 開(kāi)啟
appendfilename "appendonly.aof" :指定日志文件名稱
appendfsync :
always 每次修改同步持久化 每次發(fā)生數(shù)據(jù)變更會(huì)被立即記錄到磁盤 性能較差但數(shù)據(jù)完整性比較好
everysec 出廠默認(rèn)推薦,異步操作 ,每秒記錄 如果一秒內(nèi)宕機(jī),有數(shù)據(jù)丟失
no 從不同步
no-appendfsync-on-rewrite no :重寫時(shí)是否可以運(yùn)用 Appendfsync,默認(rèn)no即可,保證數(shù)據(jù)安全性
auto-aof-rewrite-percentage 100 :設(shè)置重寫的基準(zhǔn)
auto-aof-rewrite-min-size 64mb :設(shè)置重寫的最小文件大小
AOF文件大小是上次rewrite后大小的一倍 且文件大于64M時(shí)觸發(fā)重寫
實(shí)驗(yàn):查看日志文件
1.修改配置文件,開(kāi)啟AOF
appendonly yes
2. 設(shè)置值
127.0.0.1:9736> set k1 v1 OK 127.0.0.1:9736> set k2 v2 OK 127.0.0.1:9736> set k3 v3 OK 127.0.0.1:9736> set k4 v4 OK 127.0.0.1:9736> FLUSHALL OK 127.0.0.1:9736> shutdown not connected> exit [root@VM_0_7_centos bin]#
3.查看aof文件內(nèi)容
[root@VM_0_7_centos bin]# cat appendonly.aof *2 $6 SELECT $1 0 *3 $3 set $2 k1 $2 v1 *3 $3 set $2 k2 $2 v2 *3 $3 set $2 k3 $2 v3 *3 $3 set $2 k4 $2 v4 *1 $8 FLUSHALL [root@VM_0_7_centos bin]#
4. 編輯 aof文件內(nèi)容,模擬恢復(fù)文件過(guò)程
刪除 最后的 FLUSHALL ,保存
5. 啟動(dòng)redis,查看數(shù)據(jù)
127.0.0.1:9736> keys * 1) "k2" 2) "k3" 3) "k1" 4) "k4"
6. 編輯aof文件,模擬斷電,aof文件損壞
在最后加入亂碼,
set $2 k4 $2 v4 123123123 -- INSERT --
7.因?yàn)閟hutdown ,此時(shí)存在dum.rdb文件
8.此時(shí)啟動(dòng)redis服務(wù),出現(xiàn)問(wèn)題
[root@VM_0_7_centos bin]# redis-server /myredis/redis_aof.conf 18695:C 23 Sep 2020 15:18:43.773 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 18695:C 23 Sep 2020 15:18:43.774 # Redis version=6.0.5, bits=64, commit=00000000, modified=0, pid=18695, just started 18695:C 23 Sep 2020 15:18:43.774 # Configuration loaded [root@VM_0_7_centos bin]# redis-cli -p 9736 Could not connect to Redis at 127.0.0.1:9736: Connection refused not connected>
結(jié)論,aof 和rdb共存情況下,優(yōu)先使用aof
9.修復(fù)aof redis-check-aof --fix appendonly.aof
[root@VM_0_7_centos bin]# redis-check-aof --fix appendonly.aof 0x 8b: Expected prefix '*', got: '1' AOF analyzed: size=150, ok_up_to=139, diff=11 This will shrink the AOF from 150 bytes, with 11 bytes, to 139 bytes Continue? [y/N]: y Successfully truncated AOF
10.啟動(dòng)redis 查看修復(fù)結(jié)果
127.0.0.1:9736> keys * 1) "k4" 2) "k2" 3) "k3" 4) "k1"
11.配置文件中說(shuō)明
# AOF and RDB persistence can be enabled at the same time without problems. # If the AOF is enabled on startup Redis will load the AOF, that is the file # with the better durability guarantees.
12. Rewite 重寫機(jī)制
作用:AOF采用文件追加方式,文件會(huì)越來(lái)越大,為避免出現(xiàn)此種情況,新增了重寫機(jī)制,當(dāng)AOF文件的大小超過(guò)所設(shè)定的閾值時(shí),Redis就會(huì)啟動(dòng)AOF文件的內(nèi)容壓縮,只保留可以恢復(fù)數(shù)據(jù)的最小指令集??梢允褂妹頱grewriteaof
原理: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ā)。
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
13. 優(yōu)勢(shì)
可設(shè)置 每秒同步、每修改同步、不同步
14. 劣勢(shì)
相同數(shù)據(jù)集的數(shù)據(jù)而言aof文件要遠(yuǎn)大于rdb文件,恢復(fù)速度慢于rdb
AOF運(yùn)行效率要慢于rdb,每秒同步策略效率較好,不同步效率和rdb相同。
15.AOF總結(jié)
16.Redis持久化總體總結(jié)
1. RDB持久化方式能夠在指定的時(shí)間間隔能對(duì)你的數(shù)據(jù)進(jìn)行快照存儲(chǔ)
2. AOF持久化方式記錄每次對(duì)服務(wù)器寫的操作,當(dāng)服務(wù)器重啟的時(shí)候會(huì)重新執(zhí)行這些命令來(lái)恢復(fù)原始的數(shù)據(jù),AOF命令以redis協(xié)議追加保存每次寫的操作到文件末尾.Redis還能對(duì)AOF文件進(jìn)行后臺(tái)重寫,使得AOF文件的體積不至于過(guò)大
3. 只做緩存:如果你只希望你的數(shù)據(jù)在服務(wù)器運(yùn)行的時(shí)候存在,你也可以不使用任何持久化方式.
4. 同時(shí)開(kāi)啟兩種持久化方式,
在這種情況下,當(dāng)redis重啟的時(shí)候會(huì)優(yōu)先載入AOF文件來(lái)恢復(fù)原始的數(shù)據(jù),因?yàn)樵谕ǔG闆r下AOF文件保存的數(shù)據(jù)集要比RDB文件保存的數(shù)據(jù)集要完整.
RDB的數(shù)據(jù)不實(shí)時(shí),同時(shí)使用兩者時(shí)服務(wù)器重啟也只會(huì)找AOF文件。那要不要只使用AOF呢?作者建議不要,因?yàn)镽DB更適合用于備份數(shù)據(jù)庫(kù)(AOF在不斷變化不好備份),快速重啟,而且不會(huì)有AOF可能潛在的bug,留著作為一個(gè)萬(wàn)一的手段。
17. 性能建議
因?yàn)镽DB文件只用作后備用途,建議只在Slave上持久化RDB文件,而且只要15分鐘備份一次就夠了,只保留save 900 1這條規(guī)則。
如果Enalbe AOF,好處是在最惡劣情況下也只會(huì)丟失不超過(guò)兩秒數(shù)據(jù),啟動(dòng)腳本較簡(jiǎn)單只load自己的AOF文件就可以了。代價(jià)一是帶來(lái)了持續(xù)的IO,二是AOF rewrite的最后將rewrite過(guò)程中產(chǎn)生的新數(shù)據(jù)寫到新文件造成的阻塞幾乎是不可避免的。只要硬盤許可,應(yīng)該盡量減少AOF rewrite的頻率,AOF重寫的基礎(chǔ)大小默認(rèn)值64M太小了,可以設(shè)到5G以上。默認(rèn)超過(guò)原大小100%大小時(shí)重寫可以改到適當(dāng)?shù)臄?shù)值。
如果不Enable AOF ,僅靠Master-Slave Replication 實(shí)現(xiàn)高可用性也可以。能省掉一大筆IO也減少了rewrite時(shí)帶來(lái)的系統(tǒng)波動(dòng)。代價(jià)是如果Master/Slave同時(shí)倒掉,會(huì)丟失十幾分鐘的數(shù)據(jù),啟動(dòng)腳本也要比較兩個(gè)Master/Slave中的RDB文件,載入較新的那個(gè)。新浪微博就選用了這種架構(gòu)
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Redis持久化AOF的特點(diǎn)有哪些”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
網(wǎng)站名稱:Redis持久化AOF的特點(diǎn)有哪些
轉(zhuǎn)載源于:http://jinyejixie.com/article24/ggshje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、建站公司、網(wǎng)站內(nèi)鏈、定制開(kāi)發(fā)、網(wǎng)站制作、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)