日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
圖解Redis,談?wù)凴edis的持久化,RDB快照與AOF日志

今天分享一下Redis的持久化、事務(wù)、管道相關(guān)的知識(shí)點(diǎn),實(shí)現(xiàn)快速入門,豐富個(gè)人簡歷,提高面試level,給自己增加一點(diǎn)談資,秒變面試小達(dá)人,BAT不是夢。

創(chuàng)新互聯(lián)公司長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為措勤企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,措勤網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

Redis是一個(gè)鍵值對數(shù)據(jù)庫,服務(wù)器中通常包含著任意個(gè)非空數(shù)據(jù)庫,而每個(gè)非空數(shù)據(jù)庫中又可以包含任意個(gè)鍵值對,我們將是服務(wù)器中的非空數(shù)據(jù)庫以及它們的鍵值對統(tǒng)稱為數(shù)據(jù)庫狀態(tài)。

Redis是內(nèi)存數(shù)據(jù)庫,它將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,如果不能將內(nèi)存中的數(shù)據(jù)持久化到磁盤中,Redis突然宕機(jī),會(huì)導(dǎo)致數(shù)據(jù)丟失。

為了解決這個(gè)問題,Redis提供了RDB持久化功能,RDB持久化會(huì)將Redis在內(nèi)存中的數(shù)據(jù)庫狀態(tài)保存到磁盤中,避免數(shù)據(jù)意外丟失。

一、RDB持久化

RDB,英文全稱Redis DataBase,在指定的時(shí)間間隔,將內(nèi)存中的數(shù)據(jù)寫入磁盤,待恢復(fù)時(shí)再將磁盤中的數(shù)據(jù)寫入內(nèi)存。

1、自動(dòng)觸發(fā)

redis.conf配置文件中,save ,比如 save 60 20,在60秒內(nèi)修改20次就自動(dòng)觸發(fā)RDB備份。

2、手動(dòng)觸發(fā)

通過save和bgsave手動(dòng)觸發(fā)RDB備份。

(1)save,在主程序中執(zhí)行會(huì)阻塞當(dāng)前Redis服務(wù)器,直到RDB持久化完成,也就是說save持久化期間,Redis就不能用了,禁止使用。

(2)bgsave,不阻塞當(dāng)前Redis服務(wù)器,Redis會(huì)fork一個(gè)子進(jìn)程,異步進(jìn)行快照操作。

禁用快照:redis-cli config set save ""。

3、設(shè)置保存條件

服務(wù)器程序會(huì)根據(jù)save選項(xiàng)所設(shè)置的保存條件,設(shè)置服務(wù)器狀態(tài)redisServer結(jié)構(gòu)的saveparams屬性。

dirty計(jì)數(shù)器記錄距離上次成功執(zhí)行save命令后,服務(wù)器對數(shù)據(jù)狀態(tài)進(jìn)行了多少次修改。

lastsave屬性是一個(gè)UNIX時(shí)間戳,記錄了服務(wù)器上一次成功執(zhí)行save命令的時(shí)間。

屬性是一個(gè)數(shù)組,數(shù)組中的每個(gè)元素都是一個(gè)saveparam結(jié)構(gòu),每個(gè)saveparam結(jié)構(gòu)都保存了一個(gè)save選項(xiàng)設(shè)置的保存條件。

以上就是Redis服務(wù)器根據(jù)save選項(xiàng)所設(shè)置的保存條件,自動(dòng)執(zhí)行bgsave命令,進(jìn)行間隔性數(shù)據(jù)保存的實(shí)現(xiàn)原理。

4、加解密

RDB持久化功能所生成的RDB文件是一個(gè)經(jīng)過壓縮的二進(jìn)制文件,通過該文件可以還原生成RDB文件時(shí)的數(shù)據(jù)庫狀態(tài)。

5、RDB持久化優(yōu)缺點(diǎn)

(1)優(yōu)點(diǎn)

  1. 適合大規(guī)模的數(shù)據(jù)備份、恢復(fù)。
  2. 可以定時(shí)備份。
  3. 對數(shù)據(jù)一致性、完整性要求不高的場景可以使用。
  4. RDB文件在內(nèi)存中的加載速度要比AOF塊。

(2)缺點(diǎn)

  1. 因?yàn)槭嵌〞r(shí)備份,如果Redis宕機(jī)的話,會(huì)丟失一部分?jǐn)?shù)據(jù)。
  2. 因?yàn)槭菙?shù)據(jù)的全量同步,如果數(shù)據(jù)量過大,會(huì)產(chǎn)生大量IO,嚴(yán)重影響服務(wù)器性能。
  3. RDB持久化時(shí),會(huì)fork一個(gè)子進(jìn)程,如果數(shù)據(jù)過大, 可能會(huì)導(dǎo)致服務(wù)器的瞬間延遲;fork的時(shí)候內(nèi)存中的數(shù)據(jù)會(huì)被克隆一份,是否會(huì)造成內(nèi)存溢出,值得考慮。

6、哪些情況會(huì)觸發(fā)RDB持久化?

(1)redis.conf中的定時(shí)配置。

(2)手動(dòng)執(zhí)行save、bgsave命令。

(3)執(zhí)行flushall、flushdb命令,產(chǎn)生的.rdb文件是空的。

(4)執(zhí)行shutdown命令,且沒有設(shè)置AOF持久化。

(5)主動(dòng)復(fù)制時(shí),主節(jié)點(diǎn)自動(dòng)觸發(fā)。

注意:save和bgsave不能同時(shí)執(zhí)行,如果bgsave命令正在執(zhí)行,那么客戶端發(fā)送的save命令會(huì)被拒絕執(zhí)行,服務(wù)器禁止save和bgsave同時(shí)執(zhí)行是為了避免父進(jìn)程和子進(jìn)程同時(shí)執(zhí)行兩個(gè)rdbSave調(diào)用,防止產(chǎn)生競爭條件。

創(chuàng)建RDB文件的實(shí)際工作是由rdb.c/rdbSave函數(shù)完成,save和bgsave會(huì)以不同的方式調(diào)用這個(gè)函數(shù)。

二、AOF持久化

AOF,Append Only File,以日志的方式記錄每一個(gè)操作命令,只追加不修改,Redis啟動(dòng)時(shí)會(huì)讀取該文件,重新執(zhí)行一遍之前的寫操作命令,達(dá)到恢復(fù)數(shù)據(jù)的效果。

默認(rèn)不開啟,需要更改為appendonly yes,開啟AOF快照功能。

1、AOF持久化過程

(1)在執(zhí)行Redis命令時(shí),Redis會(huì)將這些命令放入AOF緩存中,AOF緩存是位于內(nèi)存中的一個(gè)區(qū)域,AOF緩存中的命令達(dá)到一定數(shù)量后,批量寫入磁盤,避免頻繁的磁盤IO操作。

(2)根據(jù)AOF緩沖區(qū)同步文件的三種寫回策略,將命令寫到磁盤的AOF文件中。

(3)隨著寫入AOF內(nèi)容的增加,會(huì)根據(jù)規(guī)則進(jìn)行命令的合并,起到壓縮AOF文件的效果。

(4)當(dāng)Redis重啟時(shí),會(huì)根據(jù)AOF文件,依此執(zhí)行命令,恢復(fù)內(nèi)存數(shù)據(jù)。

很多人會(huì)問,如果加入到AOF緩存的數(shù)據(jù)還沒寫入磁盤,此時(shí)服務(wù)器宕機(jī)了,數(shù)據(jù)不會(huì)產(chǎn)生丟失嗎?

系統(tǒng)提供了fsync和fdatasync兩個(gè)同步函數(shù),他們可以強(qiáng)制操作系統(tǒng)立即將緩存區(qū)中的數(shù)據(jù)寫入到磁盤里,確保寫入數(shù)據(jù)的完整性。

2、appendfsync的選項(xiàng)值

(1)Always,同步寫回,每個(gè)寫命令執(zhí)行完立刻同步到磁盤;最多只會(huì)丟失一個(gè)命令的數(shù)據(jù),最安全,但是效率最低。

(2)everysec,每秒寫回;它最多丟失1秒的數(shù)據(jù)。

(3)no,操作系統(tǒng)控制的寫回,每個(gè)命令執(zhí)行完,存到AOF緩存中,由操作系統(tǒng)決定,啥時(shí)候?qū)⒚顚懭氲酱疟PAOF文件中。

3、AOF持久化優(yōu)缺點(diǎn)

(1)優(yōu)點(diǎn)

更好的保護(hù)數(shù)據(jù)不丟失,性能高,可做緊恢復(fù)。

(2)缺點(diǎn)

  1. 等量級的命令,AOF持久化文件要大于RDB持久化文件。
  2. 恢復(fù)速度慢于RDB;

4、數(shù)據(jù)恢復(fù)順序和加載流程

當(dāng)同時(shí)開啟AOF和RDB的時(shí)候,會(huì)優(yōu)先加載AOF文件來恢復(fù)數(shù)據(jù),因?yàn)橥ǔG闆r下AOF文件比RDB文件備份的數(shù)據(jù)要完整。

三、Redis事務(wù)

1、Redis事務(wù)是什么?

可以一次性順序執(zhí)行多個(gè)命令,不可被其它命令插隊(duì),但是,Redis的事務(wù)不能回滾。

2、Redis事務(wù)常用命令

(1)discard,取消事務(wù),放棄執(zhí)行事務(wù)內(nèi)的所有命令。

(2)exec,執(zhí)行所有命令。

(3)multi,標(biāo)記一個(gè)事務(wù)塊的開始。

(4)unwatch,取消watch命令對所有key的監(jiān)視。

(5)watch key,監(jiān)視某個(gè)key,如果這個(gè)key在事務(wù)執(zhí)行之前被其它命令改動(dòng),那么事務(wù)將被打斷。

3、事務(wù)命令執(zhí)行順序

4、事務(wù)的ACID特性

在Redis中,事務(wù)總是具有原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation),并且Redis運(yùn)行在某些特殊模式下,也具有持久性(Durability)。

(1)原子性

事務(wù)具有原子性,指的是事務(wù)中的多個(gè)操作當(dāng)做一個(gè)整體來執(zhí)行,服務(wù)器要么就執(zhí)行事務(wù)中的全部操作,要么就一個(gè)操作也不執(zhí)行。

(2)一致性

如果數(shù)據(jù)庫在執(zhí)行事務(wù)之前是一致的,那么在事務(wù)執(zhí)行之后,無論事務(wù)執(zhí)行是否成功,數(shù)據(jù)庫也應(yīng)該是一致的。

(3)隔離性

隔離性指即使數(shù)據(jù)庫中有多個(gè)事務(wù)并發(fā)地執(zhí)行,各個(gè)事務(wù)之間也不會(huì)互相影響,并且在并發(fā)狀態(tài)下執(zhí)行的事務(wù)和串行執(zhí)行的事務(wù)產(chǎn)生的結(jié)果完全相同。

(4)持久性

當(dāng)一個(gè)事務(wù)執(zhí)行完畢時(shí),執(zhí)行這個(gè)事務(wù)所得的結(jié)果已經(jīng)被保存到硬盤里,即使服務(wù)器此時(shí)宕機(jī),執(zhí)行事務(wù)所得的結(jié)果也不會(huì)丟失。

四、Redis管道

1、Redis管道釋義

Redis是一種基于客戶端-服務(wù)端模型以及請求響應(yīng)協(xié)議的TCP服務(wù),每個(gè)請求會(huì)遵循如下操作:

(1)客戶端向服務(wù)端發(fā)送命令,① 發(fā)送命令;② 命令排隊(duì);③ 命令執(zhí)行;④ 返回結(jié)果,監(jiān)聽Socket返回,通常以阻塞模

(2)式等待服務(wù)端響應(yīng)。

服務(wù)端處理命令,并將結(jié)果返回給客戶端。

上面兩步走,稱為RTT,數(shù)據(jù)往返于兩端的時(shí)間,Round Trip Time。

如果需要執(zhí)行大量命令,那么新的命令要等待上一個(gè)命令執(zhí)行完畢才能執(zhí)行,會(huì)頻繁的調(diào)用系統(tǒng)IO,頻繁發(fā)送網(wǎng)絡(luò)請求,同時(shí)需要Redis調(diào)用多次read()和write()系統(tǒng)方法,系統(tǒng)方法會(huì)將數(shù)據(jù)從用戶態(tài)轉(zhuǎn)移到內(nèi)核態(tài),性能不佳。

2、注意事項(xiàng)

(1)pipeline緩存的指令只會(huì)依此執(zhí)行,不保證原子性,如果執(zhí)行中發(fā)生異常,也會(huì)繼續(xù)執(zhí)行后面的指令。

(2)使用pipeline組裝的命令個(gè)數(shù)不能太多,不然可能會(huì)造成阻塞時(shí)間過長的現(xiàn)象,同時(shí)服務(wù)端也會(huì)被迫回復(fù)一個(gè)隊(duì)列答復(fù),占用過多內(nèi)存。

3、代碼實(shí)戰(zhàn)

編寫一個(gè)命令腳本,添加幾個(gè)不同類型的數(shù)據(jù)。

通過 cat run.txt | redis-cli -a 111111 --pipe 命令,體驗(yàn)Redis管道效果。

Redis管道

本文轉(zhuǎn)載自微信公眾號(hào)「哪吒編程」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系哪吒編程公眾號(hào)。


文章標(biāo)題:圖解Redis,談?wù)凴edis的持久化,RDB快照與AOF日志
文章地址:http://www.5511xx.com/article/dhjscej.html