本發(fā)明涉及計(jì)算機(jī)存儲(chǔ)領(lǐng)域,更具體的說(shuō),是涉及一種緩存數(shù)據(jù)的方法及裝置。
背景技術(shù):
計(jì)算機(jī)CPU運(yùn)算速度快,但從其內(nèi)存中讀取數(shù)據(jù)的速度不夠,導(dǎo)致系統(tǒng)與硬盤(pán)之間交換數(shù)據(jù)形成瓶頸,因此,計(jì)算機(jī)采用緩存技術(shù),以提高計(jì)算機(jī)數(shù)據(jù)的傳輸速度。
目前,計(jì)算機(jī)的緩存系統(tǒng)主要通過(guò)服務(wù)器內(nèi)的后端緩存介質(zhì)如RAMCloud、CacheProxy,對(duì)小量的變化不大的熱數(shù)據(jù)進(jìn)行緩存,在接收到客戶(hù)端的訪(fǎng)問(wèn)請(qǐng)求時(shí),通過(guò)Socket通信從服務(wù)器中的后端緩存介質(zhì)如RAMCloud、CacheProxy中讀取數(shù)據(jù),并返回給客戶(hù)端,從而減輕了后端數(shù)據(jù)庫(kù)的壓力;然而,每一次訪(fǎng)問(wèn)后端緩存介質(zhì)時(shí),用戶(hù)都需要通過(guò)Socket通信才能從后端緩存中讀取緩存的數(shù)據(jù),進(jìn)而降低了數(shù)據(jù)讀取的響應(yīng)時(shí)間,其次,由于Socket通信需要經(jīng)過(guò)網(wǎng)絡(luò)傳輸實(shí)現(xiàn)通信,進(jìn)而也增加了跨網(wǎng)絡(luò)訪(fǎng)問(wèn)發(fā)生故障的概率。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種緩存數(shù)據(jù)的方法及裝置,進(jìn)而既提高了讀取數(shù)據(jù)的響應(yīng)時(shí)間,又避免了網(wǎng)絡(luò)間的緩存調(diào)用,降低了跨網(wǎng)絡(luò)訪(fǎng)問(wèn)發(fā)生故障的概率。
為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
一種緩存數(shù)據(jù)的方法,應(yīng)用于緩存裝置,預(yù)先獲得第一緩存數(shù)據(jù),包括:
獲取客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令;
判斷所述第一緩存數(shù)據(jù)中是否包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù);
在包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),將與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的所述第一緩存數(shù)據(jù)中的數(shù)據(jù)發(fā)送到所述客戶(hù)端。
優(yōu)選地,所述預(yù)先獲得第一緩存數(shù)據(jù)包括:
獲取所述客戶(hù)端發(fā)送的應(yīng)用重啟指令;
從服務(wù)器的后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取第一數(shù)據(jù),其中,所述第一數(shù)據(jù)為當(dāng)前訪(fǎng)問(wèn)頻率大于預(yù)設(shè)頻率的數(shù)據(jù),所述第一數(shù)據(jù)的數(shù)據(jù)容量值小于預(yù)設(shè)極大容量值;
將獲取到的所述第一數(shù)據(jù)進(jìn)行緩存,獲得第一緩存數(shù)據(jù)。
優(yōu)選地,在所述將獲取到的所述第一數(shù)據(jù)進(jìn)行緩存,獲得第一緩存數(shù)據(jù)之后,還包括:
記錄所述第一緩存數(shù)據(jù)的緩存時(shí)間值;
在所述第一緩存數(shù)據(jù)的緩存時(shí)間值等于預(yù)設(shè)的過(guò)期時(shí)間值時(shí),刪除失效數(shù)據(jù),其中所述失效數(shù)據(jù)為對(duì)應(yīng)緩存時(shí)間值等于所述預(yù)設(shè)的過(guò)期時(shí)間值的數(shù)據(jù)。
優(yōu)選地,在所述刪除失效數(shù)據(jù)之后,還包括:
從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取第二數(shù)據(jù),其中,所述第二數(shù)據(jù)為當(dāng)前訪(fǎng)問(wèn)頻率大于預(yù)設(shè)頻率的數(shù)據(jù);
判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值是否大于所述第二數(shù)據(jù)所占容量值;
在大于所述第二數(shù)據(jù)所占容量值時(shí),將獲取到的所述第二數(shù)據(jù)進(jìn)行緩存,獲得第二緩存數(shù)據(jù)。
優(yōu)選地,在所述第一緩存數(shù)據(jù)的緩存時(shí)間值小于預(yù)設(shè)的過(guò)期時(shí)間值時(shí),將與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的所述第一緩存數(shù)據(jù)中的數(shù)據(jù)發(fā)送到所述客戶(hù)端之后,還包括:
記錄所述第一緩存數(shù)據(jù)的讀取次數(shù);
判斷在預(yù)設(shè)讀取時(shí)間值內(nèi),所述第一緩存數(shù)據(jù)的讀取次數(shù)是否小于預(yù)設(shè)讀取次數(shù);
在所述預(yù)設(shè)讀取時(shí)間值內(nèi),所述第一緩存數(shù)據(jù)的讀取次數(shù)小于預(yù)設(shè)讀取次數(shù)時(shí),刪除對(duì)應(yīng)小于所述預(yù)設(shè)讀取次數(shù)的所述緩存數(shù)據(jù)中的數(shù)據(jù)。
優(yōu)選地,在所述判斷所述第一緩存數(shù)據(jù)中不包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)之后,還包括:
判斷所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中是否包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù);
在包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù);
判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值是否大于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值;
在大于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值時(shí),將獲取得到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)進(jìn)行緩存,獲得第三緩存數(shù)據(jù);
將所述第三緩存數(shù)據(jù)發(fā)送到所述客戶(hù)端;
在小于或等于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值時(shí),刪除容量值等于預(yù)設(shè)容量值的緩存數(shù)據(jù);
將獲取得到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)進(jìn)行緩存,獲得第四緩存數(shù)據(jù);
將所述第四緩存數(shù)據(jù)發(fā)送到所述客戶(hù)端。
一種緩存數(shù)據(jù)的裝置,包括:
第一數(shù)據(jù)獲取模塊,用于獲得第一緩存數(shù)據(jù);
第一指令獲取模塊,用于獲取客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令;
第一判斷模塊,用于判斷所述第一緩存數(shù)據(jù)中是否包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù);
第一發(fā)送模塊,用于在所述第一緩存數(shù)據(jù)中包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),將與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的所述第一緩存數(shù)據(jù)中的數(shù)據(jù)發(fā)送到所述客戶(hù)端。
優(yōu)選地,所述第一數(shù)據(jù)獲取模塊包括:
第二指令獲取模塊,用于獲取所述客戶(hù)端發(fā)送的應(yīng)用重啟指令;
第二數(shù)據(jù)獲取模塊,用于從服務(wù)器的后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取第一數(shù)據(jù),其中,所述第一數(shù)據(jù)為當(dāng)前訪(fǎng)問(wèn)頻率大于預(yù)設(shè)頻率的數(shù)據(jù),所述第一數(shù)據(jù)的數(shù)據(jù)容量值小于預(yù)設(shè)極大容量值;
第一緩存模塊,用于將獲取到的所述第一數(shù)據(jù)進(jìn)行緩存,獲得第一緩存數(shù)據(jù)。
優(yōu)選地,在所述第一緩存模塊將獲取到的所述第一數(shù)據(jù)進(jìn)行緩存,獲得第一緩存數(shù)據(jù)之后,還包括:
第一記錄模塊,用于記錄所述第一緩存數(shù)據(jù)的緩存時(shí)間值;
第一刪除模塊,用于在所述第一緩存數(shù)據(jù)的緩存時(shí)間值等于預(yù)設(shè)的過(guò)期時(shí)間值時(shí),刪除失效數(shù)據(jù),其中所述失效數(shù)據(jù)為對(duì)應(yīng)緩存時(shí)間值等于所述預(yù)設(shè)的過(guò)期時(shí)間值的數(shù)據(jù)。
優(yōu)選地,在所述第一刪除模塊刪除失效數(shù)據(jù)之后,還包括:
第三數(shù)據(jù)獲取模塊,用于從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取第二數(shù)據(jù),其中,所述第二數(shù)據(jù)為當(dāng)前訪(fǎng)問(wèn)頻率大于預(yù)設(shè)頻率的數(shù)據(jù);
第二判斷模塊,用于判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值是否大于所述第二數(shù)據(jù)所占容量值;
第二緩存模塊,用于在所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值大于所述第二數(shù)據(jù)所占容量值時(shí),將獲取到的所述第二數(shù)據(jù)進(jìn)行緩存,獲得第二緩存數(shù)據(jù)。
優(yōu)選地,在所述第一緩存數(shù)據(jù)的緩存時(shí)間值小于預(yù)設(shè)的過(guò)期時(shí)間值時(shí),所述第一發(fā)送模塊將與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的所述第一緩存數(shù)據(jù)中的數(shù)據(jù)發(fā)送到所述客戶(hù)端之后,還包括:
第二記錄模塊,用于記錄所述第一緩存數(shù)據(jù)的讀取次數(shù);
第三判斷模塊,用于判斷在預(yù)設(shè)讀取時(shí)間值內(nèi),所述第一緩存數(shù)據(jù)的讀取次數(shù)是否小于預(yù)設(shè)讀取次數(shù);
第二刪除模塊,用于在所述預(yù)設(shè)讀取時(shí)間值內(nèi),所述第一緩存數(shù)據(jù)的讀取次數(shù)小于預(yù)設(shè)讀取次數(shù)時(shí),刪除對(duì)應(yīng)小于所述預(yù)設(shè)讀取次數(shù)的所述緩存數(shù)據(jù)中的數(shù)據(jù)。
優(yōu)選地,在所述第一判斷模塊判斷所述第一緩存數(shù)據(jù)中不包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)之后,還包括:
第四判斷模塊,用于判斷所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中是否包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù);
第四數(shù)據(jù)獲取模塊,用于在所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù);
第五判斷模塊,用于判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值是否大于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值;
第三緩存模塊,用于在所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值大于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值時(shí),將獲取得到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)進(jìn)行緩存,獲得第三緩存數(shù)據(jù);
第二發(fā)送模塊,用于將所述第三緩存數(shù)據(jù)發(fā)送到所述客戶(hù)端;
第三刪除模塊,用于在所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值小于或等于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值時(shí),刪除容量值等于預(yù)設(shè)容量值的緩存數(shù)據(jù);
第四緩存模塊,用于將獲取得到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)進(jìn)行緩存,獲得第四緩存數(shù)據(jù);
第三發(fā)送模塊,用于將所述第四緩存數(shù)據(jù)發(fā)送到所述客戶(hù)端。
經(jīng)由上述的技術(shù)方案可知,與現(xiàn)有技術(shù)相比,本發(fā)明提供了一種緩存數(shù)據(jù)的方法及裝置,應(yīng)用于緩存裝置,預(yù)先獲得第一緩存數(shù)據(jù),通過(guò)在接收到客戶(hù)端發(fā)送來(lái)的數(shù)據(jù)獲取指令,且判斷所述第一緩存數(shù)據(jù)內(nèi)包含有對(duì)應(yīng)所述數(shù)據(jù)獲取指令的數(shù)據(jù)時(shí),直接從所述緩存裝置中緩存的數(shù)據(jù)內(nèi)找到與所述數(shù)據(jù)獲取指令所對(duì)應(yīng)的數(shù)據(jù),并發(fā)送給客戶(hù)端,避免了從后端緩存介質(zhì)中讀取數(shù)據(jù)再反饋給用戶(hù)的過(guò)程,使得讀取的緩存數(shù)據(jù)不需要經(jīng)過(guò)Socket通信,就能直接返回到客戶(hù)端,進(jìn)而提高了讀取緩存數(shù)據(jù)的響應(yīng)時(shí)間,且讀取的數(shù)據(jù)不經(jīng)過(guò)網(wǎng)絡(luò)傳輸,又降低了跨網(wǎng)絡(luò)訪(fǎng)問(wèn)發(fā)生故障的概率。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種緩存數(shù)據(jù)的方法流程圖;
圖2為本發(fā)明實(shí)施例提供的另一種緩存數(shù)據(jù)的方法流程圖;
圖3為本發(fā)明實(shí)施例提供的一種回收緩存數(shù)據(jù)的方法流程圖;
圖4為本發(fā)明實(shí)施例提供的一種從服務(wù)器獲取緩存數(shù)據(jù)的方法流程圖;
圖5為本發(fā)明實(shí)施例提供的一種緩存數(shù)據(jù)的結(jié)構(gòu)示意圖;
圖6為本發(fā)明實(shí)施例提供的另一種緩存數(shù)據(jù)的結(jié)構(gòu)示意圖;
圖7為本發(fā)明實(shí)施例提供的一種回收緩存數(shù)據(jù)的結(jié)構(gòu)示意圖;
圖8為本發(fā)明實(shí)施例提供的一種從服務(wù)器獲取緩存數(shù)據(jù)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本實(shí)施例公開(kāi)了一種緩存數(shù)據(jù)的方法,應(yīng)用于緩存裝置,預(yù)先獲得第一緩存數(shù)據(jù),請(qǐng)參見(jiàn)附圖1,所述方法具體包括以下步驟:
步驟101:獲取所述客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令;
具體的,在確保將所述緩存裝置中存在預(yù)先加載的所述第一緩存數(shù)據(jù)后,只要獲取到用戶(hù)客戶(hù)端發(fā)送來(lái)的訪(fǎng)問(wèn)請(qǐng)求,即數(shù)據(jù)獲取指令,就能在所述緩存裝置中繼續(xù)執(zhí)行后續(xù)響應(yīng)訪(fǎng)問(wèn)的相關(guān)操作。
步驟102:判斷所述第一緩存數(shù)據(jù)中是否包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),若包含,則執(zhí)行步驟103;
具體的,在所述緩存裝置獲取到所述客戶(hù)端發(fā)送來(lái)的數(shù)據(jù)獲取指令時(shí),需要先判斷一下內(nèi)部預(yù)先緩存的所述第一緩存數(shù)據(jù)內(nèi)是否有符合所述數(shù)據(jù)獲取指令所需的數(shù)據(jù)信息,只有在所述第一緩存數(shù)據(jù)內(nèi)包含的數(shù)據(jù)命中了所述數(shù)據(jù)獲取指令所需的數(shù)據(jù)信息時(shí),才能繼續(xù)進(jìn)行后續(xù)的對(duì)客戶(hù)端訪(fǎng)問(wèn)的應(yīng)答過(guò)程。
步驟103:將與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的所述第一緩存數(shù)據(jù)中的數(shù)據(jù)發(fā)送到所述客戶(hù)端;
具體的,在所述第一緩存數(shù)據(jù)內(nèi)包含的數(shù)據(jù)中有符合所述數(shù)據(jù)獲取指令所需的數(shù)據(jù)信息時(shí),所述緩存裝置才將其內(nèi)緩存的符合所述數(shù)據(jù)獲取指令所需的數(shù)據(jù)信息的緩存數(shù)據(jù)直接發(fā)送給所述客戶(hù)端,避免了網(wǎng)絡(luò)間的緩存調(diào)用。
本發(fā)明實(shí)施例公開(kāi)的緩存數(shù)據(jù)的方法中,主要應(yīng)用于本地建立的緩存裝置,預(yù)先獲得第一緩存數(shù)據(jù),通過(guò)在獲取到所述客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令,且判斷自身的所述第一緩存數(shù)據(jù)內(nèi)包含有對(duì)應(yīng)所述數(shù)據(jù)獲取指令的數(shù)據(jù)時(shí),直接將與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的緩存數(shù)據(jù)發(fā)送給所述客戶(hù)端,進(jìn)而避免了網(wǎng)絡(luò)間的緩存調(diào)用,實(shí)現(xiàn)了快速、便捷地?cái)?shù)據(jù)讀取響應(yīng),同時(shí),由于訪(fǎng)問(wèn)讀取的數(shù)據(jù)不再經(jīng)過(guò)網(wǎng)絡(luò)通信傳輸,也降低了跨網(wǎng)絡(luò)訪(fǎng)問(wèn)發(fā)生故障的概率。
本實(shí)施例公開(kāi)了另一種緩存數(shù)據(jù)的方法,應(yīng)用于緩存裝置,請(qǐng)參見(jiàn)附圖2,所述方法具體包括以下步驟:
步驟201:獲取客戶(hù)端發(fā)送的應(yīng)用重啟指令;
具體的,在本地客戶(hù)端,包含有一個(gè)緩存裝置,其中,該緩存裝置內(nèi)包含一個(gè)VMCache的高速緩存層,用于緩存數(shù)據(jù);在每次所述客戶(hù)端上的應(yīng)用重新啟動(dòng)后,所述緩存裝置內(nèi)的高速緩存層VMCache中數(shù)據(jù)為空,需要重新獲取數(shù)據(jù)進(jìn)行緩存,以便后期所述客戶(hù)端進(jìn)行訪(fǎng)問(wèn)時(shí)調(diào)用。
步驟202:從服務(wù)器的后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取第一數(shù)據(jù),其中,所述第一數(shù)據(jù)為當(dāng)前訪(fǎng)問(wèn)頻率大于預(yù)設(shè)頻率的數(shù)據(jù),所述第一數(shù)據(jù)的數(shù)據(jù)容量值小于預(yù)設(shè)極大容量值;
具體的,在獲取到所述客戶(hù)端發(fā)送的應(yīng)用重啟指令,確定當(dāng)前所述緩存裝置內(nèi)的高速緩存層VMCache中數(shù)據(jù)為空后,此時(shí)通過(guò)Socket通信從應(yīng)用服務(wù)器內(nèi)的后端緩存介質(zhì)中預(yù)先加載的數(shù)據(jù)里獲取部分訪(fǎng)問(wèn)頻率較高的數(shù)據(jù),即所述第一數(shù)據(jù),同時(shí),在獲取包含多種數(shù)據(jù)類(lèi)型的所述第一數(shù)據(jù)時(shí),還需要保證獲取到的所述第一數(shù)據(jù)所占的容量值必須小于所述緩存裝置內(nèi)的高速緩存層VMCache的極大容量值。
步驟203:將獲取到的所述第一數(shù)據(jù)進(jìn)行緩存,獲得第一緩存數(shù)據(jù);
具體的,在通過(guò)Socket通信從應(yīng)用服務(wù)器內(nèi)的后端緩存介質(zhì)中預(yù)先加載的數(shù)據(jù)里獲取到所述第一數(shù)據(jù)之后,所述緩存裝置會(huì)將所述第一數(shù)據(jù)進(jìn)行緩存,作為自身預(yù)加載的第一緩存數(shù)據(jù),此時(shí),只要所述客戶(hù)端內(nèi)的應(yīng)用不結(jié)束,則所述緩存裝置能夠多次將所述第一緩存數(shù)據(jù)返回給用戶(hù),以完成多次訪(fǎng)問(wèn)讀取。
步驟204:記錄所述第一緩存數(shù)據(jù)的緩存時(shí)間值;
具體的,所述緩存裝置在將所述第一數(shù)據(jù)內(nèi)的全部數(shù)據(jù)依次進(jìn)行緩存時(shí),會(huì)記錄下這些數(shù)據(jù)分別被緩存時(shí)的具體時(shí)間值,以及它們分別緩存在所述緩存裝置內(nèi)的持續(xù)時(shí)間值,并將記錄下的這兩個(gè)時(shí)間值作為所述第一緩存數(shù)據(jù)內(nèi)所包含的任一數(shù)據(jù)的緩存時(shí)間值,以便為后續(xù)過(guò)期判斷提供依據(jù)。
步驟205:判斷所述第一緩存數(shù)據(jù)的緩存時(shí)間值是否等于預(yù)設(shè)的過(guò)期時(shí)間值,若小于,則執(zhí)行步驟206a,若等于,則執(zhí)行步驟206b;
具體的,在所述緩存裝置記錄了所述第一緩存數(shù)據(jù)內(nèi)所包含的任一數(shù)據(jù)的緩存時(shí)間值時(shí),并在所述緩存裝置還未獲取到所述客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令之前,所述緩存裝置會(huì)實(shí)時(shí)判斷所述第一緩存數(shù)據(jù)內(nèi)所包含的全部數(shù)據(jù)的緩存時(shí)間值是否達(dá)到了設(shè)定的過(guò)期時(shí)間戳,即預(yù)設(shè)的過(guò)期時(shí)間值,如果緩存的數(shù)據(jù)已經(jīng)達(dá)到了過(guò)期時(shí)間,則對(duì)這些失效的數(shù)據(jù)進(jìn)行過(guò)期處理,若還未達(dá)到,則繼續(xù)等待客戶(hù)端的訪(fǎng)問(wèn)。
步驟206a:獲取所述客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令,并執(zhí)行步驟207;
具體的,在判斷所述第一緩存數(shù)據(jù)的緩存時(shí)間值小于預(yù)設(shè)的過(guò)期時(shí)間值,即不存在任何數(shù)據(jù)過(guò)期時(shí),那么在所述第一緩存數(shù)據(jù)中的數(shù)據(jù)未過(guò)期之前這一時(shí)間段內(nèi),可能會(huì)獲取到用戶(hù)客戶(hù)端的訪(fǎng)問(wèn)請(qǐng)求,即數(shù)據(jù)獲取指令,此時(shí),需要進(jìn)行后續(xù)從所述緩存裝置內(nèi)緩存的數(shù)據(jù)中驗(yàn)證是否命中要訪(fǎng)問(wèn)的數(shù)據(jù)信息,以便完成響應(yīng)該訪(fǎng)問(wèn)請(qǐng)求的返回操作。
步驟206b:刪除失效數(shù)據(jù),其中所述失效數(shù)據(jù)為對(duì)應(yīng)緩存時(shí)間值等于所述預(yù)設(shè)的過(guò)期時(shí)間值的數(shù)據(jù),并執(zhí)行步驟208;
具體的,在所述第一緩存數(shù)據(jù)的緩存時(shí)間值等于預(yù)設(shè)的過(guò)期時(shí)間值時(shí),則所述緩存裝置直接將這些失效的數(shù)據(jù)刪除,以便為后續(xù)再次獲取新的數(shù)據(jù)提供緩存空間。
步驟207:判斷所述第一緩存數(shù)據(jù)中是否包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),若包含,則執(zhí)行步驟209。
具體的,在所述緩存裝置獲取到所述數(shù)據(jù)獲取指令之后,會(huì)先判斷其內(nèi)緩存的數(shù)據(jù)是否包含所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),再根據(jù)判斷的結(jié)果進(jìn)行相應(yīng)的后續(xù)操作。
步驟208:從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取第二數(shù)據(jù),其中,所述第二數(shù)據(jù)為當(dāng)前訪(fǎng)問(wèn)頻率大于預(yù)設(shè)頻率的數(shù)據(jù),并執(zhí)行步驟2010;
具體的,在所述緩存裝置刪除了部分或全部失效數(shù)據(jù)后,還會(huì)從應(yīng)用服務(wù)器的后端緩存介質(zhì)中再次獲取新的數(shù)據(jù),即第二數(shù)據(jù),其中,由于所述應(yīng)用服務(wù)器內(nèi)的后端緩存介質(zhì)中的預(yù)設(shè)數(shù)據(jù)是能夠動(dòng)態(tài)更新的,且其對(duì)預(yù)加載數(shù)據(jù)的過(guò)期管理可以與所述緩存裝置對(duì)緩存數(shù)據(jù)的過(guò)期管理保持一致,如數(shù)據(jù)過(guò)期的時(shí)間戳可以設(shè)置相同等,所以此時(shí)所述緩存介質(zhì)再次獲取到的數(shù)據(jù)為所述后端緩存介質(zhì)更新后的部分預(yù)設(shè)數(shù)據(jù),且這些重新獲取到的數(shù)據(jù)的被訪(fǎng)問(wèn)頻率仍然要大于預(yù)設(shè)頻率;
其次,再次獲取的第二數(shù)據(jù)內(nèi)的數(shù)據(jù)類(lèi)型可能與之前獲取的所述第一數(shù)據(jù)所包含數(shù)據(jù)的數(shù)據(jù)類(lèi)型相同,也可能由于用戶(hù)近期訪(fǎng)問(wèn)應(yīng)用的不同及頻率的高低,導(dǎo)致應(yīng)用服務(wù)器后端緩存介質(zhì)內(nèi)更新后的預(yù)設(shè)數(shù)據(jù)所含的不同類(lèi)型的數(shù)據(jù)當(dāng)前訪(fǎng)問(wèn)頻率發(fā)生了改變,進(jìn)而也使得再次獲取的所述第二數(shù)據(jù)與之前獲取的所述第一數(shù)據(jù)所包含數(shù)據(jù)的數(shù)據(jù)類(lèi)型不相同;
最后,將從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中再次獲取到的當(dāng)前訪(fǎng)問(wèn)頻率高于預(yù)設(shè)頻率的數(shù)據(jù)作為第二數(shù)據(jù),以便在用戶(hù)客戶(hù)端再次進(jìn)行訪(fǎng)問(wèn),即所述客戶(hù)端發(fā)送新的數(shù)據(jù)獲取指令時(shí),能夠?qū)⒆钚碌木彺鏀?shù)據(jù)返回給用戶(hù)客戶(hù)端。
步驟209:將與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的所述第一緩存數(shù)據(jù)中的數(shù)據(jù)發(fā)送到所述客戶(hù)端。
步驟2010:判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值是否大于所述第二數(shù)據(jù)所占容量值,若大于,則執(zhí)行步驟2011;
具體的,由于所述緩存裝置刪除了其內(nèi)的失效數(shù)據(jù)可能為之前緩存了的所述第一緩存數(shù)據(jù)的部分?jǐn)?shù)據(jù),所以在重新從所述應(yīng)用服務(wù)器的后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)內(nèi)獲取到所述第二數(shù)據(jù)時(shí),還需要保證其內(nèi)現(xiàn)存的所有數(shù)據(jù)的容量值仍然小于其預(yù)設(shè)極大容量值;而當(dāng)所述緩存裝置刪除了其內(nèi)的失效數(shù)據(jù)為之前緩存了的所述第一緩存數(shù)據(jù)的全部數(shù)據(jù)時(shí),依舊需要控制再次獲取到的所述第二數(shù)據(jù)所占容量值小于其內(nèi)預(yù)設(shè)極大容量值。
步驟2011:將獲取到的所述第二數(shù)據(jù)進(jìn)行緩存,獲得第二緩存數(shù)據(jù);
具體的,在所述緩存裝置將其內(nèi)失效的數(shù)據(jù)替換為重新從應(yīng)用服務(wù)器內(nèi)的后端緩存介質(zhì)中獲取到的當(dāng)前訪(fǎng)問(wèn)頻率較高的部分?jǐn)?shù)據(jù),即所述第二數(shù)據(jù)時(shí),將所述第二數(shù)據(jù)作為其內(nèi)的第二緩存數(shù)據(jù)再次緩存,以便后期獲取到用戶(hù)客戶(hù)端發(fā)送的訪(fǎng)問(wèn)請(qǐng)求時(shí),能夠直接從本地緩存裝置內(nèi)已經(jīng)緩存了的目前一段時(shí)間內(nèi)訪(fǎng)問(wèn)頻率較高的數(shù)據(jù)中返回用戶(hù)所需數(shù)據(jù),提高數(shù)據(jù)讀取的響應(yīng)速度。
本發(fā)明實(shí)施例公開(kāi)的緩存數(shù)據(jù)的方法中,主要應(yīng)用于緩存裝置,通過(guò)從應(yīng)用服務(wù)器的后端緩存介質(zhì)內(nèi)的預(yù)設(shè)數(shù)據(jù)中獲取訪(fǎng)問(wèn)頻率較高的部分?jǐn)?shù)據(jù),作為自身的第一緩存數(shù)據(jù),并分別記錄所述第一緩存數(shù)據(jù)內(nèi)的數(shù)據(jù)所對(duì)應(yīng)的緩存時(shí)間值,并將對(duì)應(yīng)緩存時(shí)間值等于所述預(yù)設(shè)的過(guò)期時(shí)間值的數(shù)據(jù)及時(shí)刪除,來(lái)降低所述緩存裝置的內(nèi)存消耗,之后,在重新從服務(wù)器的后端緩存介質(zhì)中的預(yù)設(shè)數(shù)據(jù)內(nèi)獲取部分已經(jīng)進(jìn)行了動(dòng)態(tài)更新的數(shù)據(jù)作為所述第二數(shù)據(jù),并將其再次緩存到所述緩存裝置中,以便在接收到用戶(hù)客戶(hù)端的訪(fǎng)問(wèn)時(shí),能夠直接將最新的緩存數(shù)據(jù)返給用戶(hù),既提高了數(shù)據(jù)被讀取后的響應(yīng)時(shí)間,又滿(mǎn)足了用戶(hù)希望獲得應(yīng)用的最新數(shù)據(jù)的期望。
本發(fā)明實(shí)施例中涉及到的步驟205的執(zhí)行階段包括但不限于所述步驟204之后,還可能在所述步驟204之后的所有步驟執(zhí)行過(guò)程中進(jìn)行。
可選地,請(qǐng)參見(jiàn)附圖3,在上述實(shí)施例中涉及到的所述步驟206獲取所述客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令之后,還包括:
步驟301:記錄所述第一緩存數(shù)據(jù)的讀取次數(shù);
具體的,在所述緩存裝置從其內(nèi)緩存的所述第一緩存數(shù)據(jù)內(nèi)頻繁讀取數(shù)據(jù)返回給用戶(hù)客戶(hù)端的過(guò)程中,可能會(huì)出現(xiàn)所述第一緩存數(shù)據(jù)內(nèi)的部分?jǐn)?shù)據(jù)在還未過(guò)期失效之前,一直沒(méi)有被用戶(hù)訪(fǎng)問(wèn)過(guò),或是被訪(fǎng)問(wèn)的次數(shù)很少,此時(shí),為了降低所述緩存裝置的內(nèi)存消耗,需要?jiǎng)h除這些數(shù)據(jù),因此,在所述第一緩存數(shù)據(jù)不斷接收到客戶(hù)端的訪(fǎng)問(wèn)時(shí),需要記錄下被訪(fǎng)問(wèn)數(shù)據(jù)對(duì)應(yīng)的讀取次數(shù),以便作為后續(xù)回收的依據(jù)。
步驟302:判斷在預(yù)設(shè)讀取時(shí)間值內(nèi),所述第一緩存數(shù)據(jù)的讀取次數(shù)是否小于預(yù)設(shè)讀取次數(shù),若小于,則執(zhí)行步驟303;
具體的,在所述第一緩存數(shù)據(jù)還未過(guò)期,且持續(xù)緩存的時(shí)間值處于所述預(yù)設(shè)讀取時(shí)間值之內(nèi)的這段時(shí)間中,若判讀所述第一緩存數(shù)據(jù)所對(duì)應(yīng)的讀取次數(shù)小于預(yù)設(shè)讀取次數(shù)時(shí),則確定這部分?jǐn)?shù)據(jù)為不經(jīng)常被訪(fǎng)問(wèn)的數(shù)據(jù),需要對(duì)這些數(shù)據(jù)進(jìn)行清理,以降低內(nèi)存消耗。
步驟303:刪除對(duì)應(yīng)小于所述預(yù)設(shè)讀取次數(shù)的所述緩存數(shù)據(jù)中的數(shù)據(jù);
具體的,當(dāng)所述第一緩存數(shù)據(jù)內(nèi)存在在預(yù)設(shè)讀取時(shí)間值內(nèi),讀取次數(shù)小于所述預(yù)設(shè)讀取次數(shù)的數(shù)據(jù)時(shí),說(shuō)明這部分?jǐn)?shù)據(jù)已經(jīng)不是近期用戶(hù)訪(fǎng)問(wèn)頻率較高的數(shù)據(jù),需要對(duì)這部分?jǐn)?shù)據(jù)進(jìn)行回收刪除,以降低緩存裝置的內(nèi)存消耗;
其次,所述緩存裝置在刪除這部分不經(jīng)常被訪(fǎng)問(wèn)的數(shù)據(jù)時(shí),可以通過(guò)自定義的回收策略,利用繼承作為子類(lèi)實(shí)現(xiàn),其中,所述子類(lèi)可以自定義實(shí)現(xiàn)如FIFO、LRU等緩存回收算法;同時(shí),刪除的部分不經(jīng)常被訪(fǎng)問(wèn)的數(shù)據(jù)容量值一般為預(yù)設(shè)極大容量值的一半左右,而保留下來(lái)的數(shù)據(jù)則為訪(fǎng)問(wèn)頻率較頻繁的數(shù)據(jù),進(jìn)而提高了緩存裝置對(duì)用戶(hù)客戶(hù)端訪(fǎng)問(wèn)數(shù)據(jù)的命中率;而在對(duì)緩存數(shù)據(jù)回收刪除期間,也間接地實(shí)現(xiàn)了緩存空間的彈性擴(kuò)充和收縮,以避免無(wú)法重新獲取新的數(shù)據(jù)進(jìn)行緩存。
本發(fā)明實(shí)施例中,通過(guò)對(duì)所述緩存裝置內(nèi)已經(jīng)緩存了的所述第一緩存數(shù)據(jù)內(nèi)的數(shù)據(jù)進(jìn)行在所述預(yù)設(shè)讀取時(shí)間值內(nèi)讀取次數(shù)的記錄,來(lái)完成對(duì)不經(jīng)常被訪(fǎng)問(wèn)的數(shù)據(jù)進(jìn)行刪除,以提高緩存裝置對(duì)用戶(hù)客戶(hù)端訪(fǎng)問(wèn)數(shù)據(jù)的命中率,也實(shí)現(xiàn)了緩存空間的彈性擴(kuò)充和收縮,避免無(wú)法重新獲取新的數(shù)據(jù)進(jìn)行緩存。
可選地,請(qǐng)參見(jiàn)附圖4,在上述實(shí)施例中涉及到的所述步驟207判斷所述第一緩存數(shù)據(jù)中不包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),還包括:
步驟401:判斷所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中是否包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),若包含,則執(zhí)行步驟402;
具體的,在所述第一緩存數(shù)據(jù)中不包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),所述客戶(hù)端會(huì)通過(guò)網(wǎng)絡(luò)通信從服務(wù)器的后端緩存介質(zhì)中的預(yù)設(shè)數(shù)據(jù)內(nèi)查找是否含有與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),其中,所述服務(wù)器的后端緩存介質(zhì)包括一級(jí)緩存介質(zhì),如RAMCloud,以及后端數(shù)據(jù)庫(kù)。
步驟402:從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),并執(zhí)行步驟403;
具體的,所述客戶(hù)端會(huì)先通過(guò)網(wǎng)絡(luò)通信從服務(wù)器的一級(jí)緩存介質(zhì),如RAMCloud中查找是否含有與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),若存在,則直接從所述一級(jí)緩存介質(zhì)中獲取對(duì)應(yīng)數(shù)據(jù);若不存在,則再?gòu)乃龊蠖藬?shù)據(jù)庫(kù)中獲取其對(duì)應(yīng)的數(shù)據(jù),進(jìn)而減輕了后端數(shù)據(jù)庫(kù)的壓力。
步驟403:判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值是否大于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值,若大于,則執(zhí)行步驟404a,若小于或等于,則執(zhí)行步驟404b;
具體的,在確定了所述服務(wù)器的一級(jí)緩存介質(zhì)或是后端數(shù)據(jù)庫(kù)中包含有與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),由于所述緩存裝置內(nèi)的第一緩存數(shù)據(jù)的緩存時(shí)間值還未超過(guò)預(yù)設(shè)的過(guò)期時(shí)間值,還需判斷當(dāng)前所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值是否能夠容納再次從所述服務(wù)器的一級(jí)緩存介質(zhì)或是后端數(shù)據(jù)庫(kù)中獲取的數(shù)據(jù)。
步驟404a:將獲取得到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)進(jìn)行緩存,獲得第三緩存數(shù)據(jù),并執(zhí)行步驟405;
具體的,在當(dāng)前所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值能夠容納再次從所述服務(wù)器的一級(jí)緩存介質(zhì)或是后端數(shù)據(jù)庫(kù)中獲取的數(shù)據(jù)時(shí),才將這些新獲取到的數(shù)據(jù)成功緩存到所述緩存裝置。
步驟404b:刪除容量值等于預(yù)設(shè)容量值的緩存數(shù)據(jù),并執(zhí)行步驟406;
具體的,所述緩存裝置可以依據(jù)自定義的回收策略來(lái)刪除部分不經(jīng)常被訪(fǎng)問(wèn)的數(shù)據(jù),所述預(yù)設(shè)容量值可以為容量值等于從所述服務(wù)器的一級(jí)緩存介質(zhì)或是后端數(shù)據(jù)庫(kù)中新獲取到的數(shù)據(jù)的容量,也可以大于從所述服務(wù)器的一級(jí)緩存介質(zhì)或是后端數(shù)據(jù)庫(kù)中新獲取到的數(shù)據(jù)的容量。
步驟405:將所述第三緩存數(shù)據(jù)發(fā)送到所述客戶(hù)端。
步驟406:將獲取得到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)進(jìn)行緩存,獲得第四緩存數(shù)據(jù),并執(zhí)行步驟407。
步驟407:將所述第四緩存數(shù)據(jù)發(fā)送到所述客戶(hù)端。
本發(fā)明實(shí)施例中,通過(guò)在所述客戶(hù)端無(wú)法直接從所述緩存裝置中讀取對(duì)應(yīng)的數(shù)據(jù)時(shí),從所述服務(wù)器的后端緩存介質(zhì)中查找到對(duì)應(yīng)數(shù)據(jù),并在所述緩存裝置能夠容納這些對(duì)應(yīng)數(shù)據(jù)時(shí),將這些數(shù)據(jù)先緩存到所述緩存裝置,再由所述緩存裝置直接發(fā)送到所述客戶(hù)端,進(jìn)而方便客戶(hù)端在后期需要再次訪(fǎng)問(wèn)這些數(shù)據(jù)時(shí),能夠避免網(wǎng)絡(luò)間的緩存調(diào)用,直接從緩存裝置獲取,而在所述緩存裝置無(wú)法全部容納這些對(duì)應(yīng)數(shù)據(jù)時(shí),需要先清理掉部分緩存數(shù)據(jù),以便能夠?qū)⑦@些對(duì)應(yīng)數(shù)據(jù)成功緩存到緩存裝置中,以供用戶(hù)再次訪(fǎng)問(wèn)時(shí)讀取,縮短數(shù)據(jù)響應(yīng)時(shí)間。
本實(shí)施例公開(kāi)了一種緩存數(shù)據(jù)的裝置,請(qǐng)參見(jiàn)附圖5,所述裝置包括:
第一數(shù)據(jù)獲取模塊501,用于獲得第一緩存數(shù)據(jù);
具體的,所述第一數(shù)據(jù)獲取模塊501將所述第一緩存數(shù)據(jù)進(jìn)行提前加載,以便后續(xù)響應(yīng)用戶(hù)客戶(hù)端的訪(fǎng)問(wèn)請(qǐng)求。
第一指令獲取模塊502,用于獲取客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令;
第一判斷模塊503,用于判斷所述第一緩存數(shù)據(jù)中是否包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù);
具體的,在接收到所述第一指令獲取模塊502獲取到所述客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令時(shí),還需要經(jīng)過(guò)所述第一判斷模塊503來(lái)判斷一下所述第一數(shù)據(jù)獲取模塊501中獲得的第一緩存數(shù)據(jù)內(nèi)是否包含了與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),只有在包含了其對(duì)應(yīng)的數(shù)據(jù)時(shí),才能從所述裝置內(nèi)直接獲取。
第一發(fā)送模塊504,用于在所述第一緩存數(shù)據(jù)中包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),將與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的所述第一緩存數(shù)據(jù)中的數(shù)據(jù)發(fā)送到所述客戶(hù)端;
具體的,在所述第一判斷模塊503確定了所述第一數(shù)據(jù)獲取模塊501中獲得的第一緩存數(shù)據(jù)內(nèi)包含了與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),由所述第一發(fā)送模塊504將與之對(duì)應(yīng)的數(shù)據(jù)直接發(fā)送給所述客戶(hù)端,完成用戶(hù)的訪(fǎng)問(wèn)需求。
本發(fā)明實(shí)施例公開(kāi)的緩存數(shù)據(jù)的裝置,通過(guò)所述第一數(shù)據(jù)獲取模塊501提前加載所述第一緩存數(shù)據(jù),并在所述第一指令獲取模塊502獲取到所述客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令時(shí),先經(jīng)過(guò)所述第一判斷模塊503判斷出所述第一緩存數(shù)據(jù)中包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),再由所述第一發(fā)送模塊504將與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的所述第一緩存數(shù)據(jù)中的數(shù)據(jù)發(fā)送到所述客戶(hù)端,進(jìn)而避免了網(wǎng)絡(luò)間的緩存調(diào)用,實(shí)現(xiàn)了快速、便捷地?cái)?shù)據(jù)讀取響應(yīng),同時(shí),由于訪(fǎng)問(wèn)讀取的數(shù)據(jù)不再經(jīng)過(guò)網(wǎng)絡(luò)通信傳輸,也降低了跨網(wǎng)絡(luò)訪(fǎng)問(wèn)發(fā)生故障的概率。
本實(shí)施例公開(kāi)了另一種緩存數(shù)據(jù)的裝置,請(qǐng)參見(jiàn)附圖6,所述裝置包括:
所述第一數(shù)據(jù)獲取模塊501、所述第一指令獲取模塊502、所述第一判斷模塊503、所述第一發(fā)送模塊504、第一記錄模塊505、第一刪除模塊506、第三數(shù)據(jù)獲取模塊507、第二判斷模塊508以及第二緩存模塊509;
其中,所述第一數(shù)據(jù)獲取模塊501包括:
第二指令獲取模塊5011,用于獲取所述客戶(hù)端發(fā)送的應(yīng)用重啟指令;
具體的,由于所述裝置會(huì)在用戶(hù)客戶(hù)端每次重新啟動(dòng)應(yīng)用時(shí),將之前緩存的數(shù)據(jù)全部清除,因此在所述第一指令獲取模塊501每次獲取到客戶(hù)端發(fā)送的應(yīng)用重啟指令時(shí),就需要再次獲取數(shù)據(jù)進(jìn)行緩存,以便后期所述客戶(hù)端進(jìn)行訪(fǎng)問(wèn)時(shí)調(diào)用。
第二數(shù)據(jù)獲取模塊5012,用于從服務(wù)器的后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取第一數(shù)據(jù),其中,所述第一數(shù)據(jù)為當(dāng)前訪(fǎng)問(wèn)頻率大于預(yù)設(shè)頻率的數(shù)據(jù),所述第一數(shù)據(jù)的數(shù)據(jù)容量值小于預(yù)設(shè)極大容量值;
具體的,在所述第一指令獲取模塊501獲取到客戶(hù)端發(fā)送的應(yīng)用重啟指令時(shí),所述第一數(shù)據(jù)獲取模塊502就通過(guò)網(wǎng)絡(luò)通信從服務(wù)器的后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取當(dāng)前訪(fǎng)問(wèn)頻率較高的數(shù)據(jù),作為第一數(shù)據(jù),且獲取到的所述第一數(shù)據(jù)所占的容量值小于所述裝置的預(yù)設(shè)極大容量值。
第一緩存模塊5013,用于將獲取到的所述第一數(shù)據(jù)進(jìn)行緩存,獲得第一緩存數(shù)據(jù)。
所述第一記錄模塊505,用于記錄所述第一緩存數(shù)據(jù)的緩存時(shí)間值;
具體的,在所述第一緩存模塊5013獲得第一緩存數(shù)據(jù)時(shí),所述第一記錄模塊505會(huì)將進(jìn)行緩存的所述第一數(shù)據(jù)的緩存時(shí)間分別記錄下來(lái),作為后期過(guò)期判斷提供依據(jù)。
所述第一刪除模塊506,用于在所述第一緩存數(shù)據(jù)的緩存時(shí)間值等于預(yù)設(shè)的過(guò)期時(shí)間值時(shí),刪除失效數(shù)據(jù),其中所述失效數(shù)據(jù)為對(duì)應(yīng)緩存時(shí)間值等于所述預(yù)設(shè)的過(guò)期時(shí)間值的數(shù)據(jù);
具體的,所述第一記錄模塊505將所述第一緩存模塊5013依次進(jìn)行緩存而獲得的所述第一緩存數(shù)據(jù)所對(duì)應(yīng)的緩存時(shí)間進(jìn)行記錄,并在所述第一記錄模塊505記錄有屬于所述第一緩存數(shù)據(jù)的部分或全部數(shù)據(jù)所對(duì)應(yīng)的緩存時(shí)間值等于預(yù)設(shè)的過(guò)期時(shí)間值時(shí),由所述第一刪除模塊506將這部分?jǐn)?shù)據(jù)進(jìn)行刪除,進(jìn)而降低所述裝置的內(nèi)存消耗。
此時(shí),所述第一指令獲取模塊502,還用于在所述第一緩存數(shù)據(jù)的緩存時(shí)間值小于預(yù)設(shè)的過(guò)期時(shí)間值時(shí),獲取所述客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令;
具體的,在所述第一記錄模塊505記錄的所述第一緩存數(shù)據(jù)的全部數(shù)據(jù)所對(duì)應(yīng)的緩存時(shí)間值均小于預(yù)設(shè)的過(guò)期時(shí)間值時(shí),由所述第一指令獲取模塊502獲取所述客戶(hù)端發(fā)送的數(shù)據(jù)獲取指令,以便繼續(xù)執(zhí)行后續(xù)讀取緩存數(shù)據(jù)的操作,實(shí)現(xiàn)對(duì)用戶(hù)訪(fǎng)問(wèn)進(jìn)行的數(shù)據(jù)響應(yīng)。
所述第三數(shù)據(jù)獲取模塊507,用于從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取第二數(shù)據(jù),其中,所述第二數(shù)據(jù)為當(dāng)前訪(fǎng)問(wèn)頻率大于預(yù)設(shè)頻率的數(shù)據(jù);
具體的,在所述第一刪除模塊506刪除了所述第一緩存數(shù)據(jù)中的失效數(shù)據(jù)后,由所述第三數(shù)據(jù)獲取模塊507從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取當(dāng)前用戶(hù)訪(fǎng)問(wèn)頻率較高的部分?jǐn)?shù)據(jù),作為所述第二數(shù)據(jù),且所述第二數(shù)據(jù)的數(shù)據(jù)類(lèi)型與之前獲取到的所述第一數(shù)據(jù)的數(shù)據(jù)類(lèi)型可以相同,也可以不相同。
所述第二判斷模塊508,用于判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值是否大于所述第二數(shù)據(jù)所占容量值;
具體的,在將所述第三數(shù)據(jù)獲取模塊507獲取到的所述第二數(shù)據(jù)進(jìn)行緩存之前,還需要由所述第二判斷模塊508判斷一下當(dāng)前所述緩存裝置內(nèi)的剩余空間是否能夠全部容納再次獲取的所述第二數(shù)據(jù)。
所述第二緩存模塊509,用于在所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值大于所述第二數(shù)據(jù)所占容量值時(shí),將獲取到的所述第二數(shù)據(jù)進(jìn)行緩存,獲得第二緩存數(shù)據(jù);
具體的,在由所述第二判斷模塊508判斷所述第三數(shù)據(jù)獲取模塊507獲取到的所述第二數(shù)據(jù)滿(mǎn)足要求時(shí),所述第二緩存模塊509通過(guò)緩存獲得第二緩存數(shù)據(jù),此時(shí),所述裝置內(nèi)緩存的數(shù)據(jù)容量值仍然小于預(yù)設(shè)極大容量值。
本發(fā)明實(shí)施例公開(kāi)的緩存數(shù)據(jù)的裝置中,通過(guò)在所述第一緩存模塊5013獲得第一緩存數(shù)據(jù)后,所述第一記錄模塊505記錄所述第一緩存數(shù)據(jù)的緩存時(shí)間值,并由所述第一刪除模塊506將屬于所述第一緩存數(shù)據(jù)中的失效數(shù)據(jù)進(jìn)行刪除,進(jìn)而降低所述緩存裝置的內(nèi)存消耗,之后,所述第三數(shù)據(jù)獲取模塊507重新從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取當(dāng)前用戶(hù)訪(fǎng)問(wèn)頻率較高的部分?jǐn)?shù)據(jù),作為所述第二數(shù)據(jù),并在所述第二判斷模塊508確定所述裝置的剩余容量值能夠容納所述第二數(shù)據(jù)時(shí),由所述第二緩存模塊509將其進(jìn)行緩存,獲得所述第二緩存數(shù)據(jù),以便在接收到用戶(hù)客戶(hù)端的訪(fǎng)問(wèn)時(shí),能夠直接將最新的緩存數(shù)據(jù)返給用戶(hù),既提高了數(shù)據(jù)被讀取后的響應(yīng)時(shí)間,又滿(mǎn)足了用戶(hù)希望獲得應(yīng)用的最新數(shù)據(jù)的期望。
本發(fā)明實(shí)施例提供的各個(gè)模塊的工作過(guò)程,請(qǐng)參照附圖2所對(duì)應(yīng)的流程圖,具體工作過(guò)程不再贅述。
可選地,請(qǐng)參見(jiàn)附圖7,上述實(shí)施例涉及到的所述第一發(fā)送模塊506,在所述第一緩存數(shù)據(jù)的緩存時(shí)間值小于預(yù)設(shè)的過(guò)期時(shí)間值時(shí),將與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的所述第一緩存數(shù)據(jù)中的數(shù)據(jù)發(fā)送到所述客戶(hù)端之后,所述裝置還包括:
第二記錄模塊601,用于記錄所述第一緩存數(shù)據(jù)的讀取次數(shù);
具體的,在所述第一發(fā)送模塊504在所述第一緩存數(shù)據(jù)內(nèi)的數(shù)據(jù)未過(guò)期前,將對(duì)應(yīng)用戶(hù)客戶(hù)端數(shù)據(jù)獲取指令的數(shù)據(jù)發(fā)送給所述客戶(hù)端后,所述第二記錄模塊601會(huì)將這些被訪(fǎng)問(wèn)過(guò)的數(shù)據(jù)及訪(fǎng)問(wèn)次數(shù)記錄下來(lái),以此來(lái)判斷一段時(shí)間內(nèi)是否目前緩存的數(shù)據(jù)中有訪(fǎng)問(wèn)不頻繁的數(shù)據(jù)存在。
第三判斷模塊602,用于判斷在預(yù)設(shè)讀取時(shí)間值內(nèi),所述第一緩存數(shù)據(jù)的讀取次數(shù)是否小于預(yù)設(shè)讀取次數(shù);
具體的,在所述第一緩存數(shù)據(jù)還未過(guò)期,且持續(xù)緩存的時(shí)間值處于所述預(yù)設(shè)讀取時(shí)間值之內(nèi)的這段時(shí)間中,由所述第三判斷模塊602判斷在預(yù)設(shè)讀取時(shí)間值內(nèi),所述第一緩存數(shù)據(jù)的讀取次數(shù)是否小于預(yù)設(shè)讀取次數(shù),以此來(lái)確定所述第一緩存數(shù)據(jù)中是否存在不經(jīng)常訪(fǎng)問(wèn)的數(shù)據(jù)。
第二刪除模塊603,用于在所述預(yù)設(shè)讀取時(shí)間值內(nèi),所述第一緩存數(shù)據(jù)的讀取次數(shù)小于預(yù)設(shè)讀取次數(shù)時(shí),刪除對(duì)應(yīng)小于所述預(yù)設(shè)讀取次數(shù)的所述緩存數(shù)據(jù)中的數(shù)據(jù);
具體的,通過(guò)所述第二記錄模601記錄的所述第一緩存數(shù)據(jù)內(nèi)全部數(shù)據(jù)對(duì)應(yīng)的被訪(fǎng)問(wèn)次數(shù),由所述第三判斷模塊602確定出所述第一緩存數(shù)據(jù)內(nèi)哪些數(shù)據(jù)屬于不經(jīng)常被訪(fǎng)問(wèn)的數(shù)據(jù),即其讀取次數(shù)小于預(yù)設(shè)讀取次數(shù)的數(shù)據(jù),之后所述第二刪除模塊603將這部分?jǐn)?shù)據(jù)依據(jù)自定義的回收策略進(jìn)行刪除,進(jìn)而提高了緩存數(shù)據(jù)對(duì)用戶(hù)客戶(hù)端訪(fǎng)問(wèn)數(shù)據(jù)的命中率,也間接地實(shí)現(xiàn)了緩存空間的彈性擴(kuò)充和收縮,以避免無(wú)法重新獲取新的數(shù)據(jù)進(jìn)行緩存。
本發(fā)明實(shí)施例中,通過(guò)所述第三判斷模塊602判斷所述第二記錄模601記錄的所述第一緩存數(shù)據(jù)內(nèi)的數(shù)據(jù)進(jìn)行讀取的次數(shù)的多少,來(lái)確定出是否存在不經(jīng)常訪(fǎng)問(wèn)的數(shù)據(jù),再由所述第二刪除模塊603來(lái)完成對(duì)不經(jīng)常被訪(fǎng)問(wèn)的數(shù)據(jù)的刪除操作,以提高緩存裝置對(duì)用戶(hù)客戶(hù)端訪(fǎng)問(wèn)數(shù)據(jù)的命中率,也實(shí)現(xiàn)了緩存空間的彈性擴(kuò)充和收縮,避免無(wú)法重新獲取新的數(shù)據(jù)進(jìn)行緩存。
可選地,請(qǐng)參見(jiàn)附圖8,上述實(shí)施例涉及到的所述第一判斷模塊503,在判斷所述第一緩存數(shù)據(jù)中不包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)之后,所述裝置還包括:
第四判斷模塊701,用于判斷所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中是否包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù);
具體的,在所述第一判斷模塊505判斷所述第一緩存數(shù)據(jù)中不包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),所述第四判斷模塊701通過(guò)網(wǎng)絡(luò)通信判斷所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中是否包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),其中,所述后端緩存介質(zhì)包括一級(jí)緩存介質(zhì),如RAMCloud,以及后端數(shù)據(jù)庫(kù)。
第四數(shù)據(jù)獲取模塊702,用于在所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)時(shí),從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù);
具體的,所述第四數(shù)據(jù)獲取模塊702先通過(guò)網(wǎng)絡(luò)通信從服務(wù)器的一級(jí)緩存介質(zhì),如RAMCloud中查找是否含有與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),若存在,則直接從所述一級(jí)緩存介質(zhì)中獲取對(duì)應(yīng)數(shù)據(jù);若不存在,則再?gòu)乃龊蠖藬?shù)據(jù)庫(kù)中獲取其對(duì)應(yīng)的數(shù)據(jù),進(jìn)而減輕了后端數(shù)據(jù)庫(kù)的壓力。
第五判斷模塊703,用于判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值是否大于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值;
具體的,在所述第四數(shù)據(jù)獲取模塊702從所述后端緩存介質(zhì)中的一級(jí)緩存介質(zhì)或是后端數(shù)據(jù)庫(kù)中獲取新的數(shù)據(jù)后,還需由所述第五判斷模塊703判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值是否能夠容納獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)。
第三緩存模塊704,用于在所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值大于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值時(shí),將獲取得到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)進(jìn)行緩存,獲得第三緩存數(shù)據(jù);
具體的,在所述第五判斷模塊703判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值大于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值時(shí),由所述第三緩存模塊704將獲取到的新的數(shù)據(jù)進(jìn)行緩存,以便用戶(hù)訪(fǎng)問(wèn)時(shí)直接從所述第三緩存模塊704中讀取數(shù)據(jù)。
第二發(fā)送模塊705,用于將所述第三緩存數(shù)據(jù)發(fā)送到所述客戶(hù)端;
第三刪除模塊706,用于在所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值小于或等于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值時(shí),刪除容量值等于預(yù)設(shè)容量值的緩存數(shù)據(jù);
具體的,在所述第五判斷模塊703判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值小于或等于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值時(shí),由所述第三刪除模塊706依據(jù)自定義的回收策略刪除容量值等于預(yù)設(shè)容量值的緩存數(shù)據(jù)。
第四緩存模塊707,用于將獲取得到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)進(jìn)行緩存,獲得第四緩存數(shù)據(jù);
第三發(fā)送模塊708,用于將所述第四緩存數(shù)據(jù)發(fā)送到所述客戶(hù)端。
本發(fā)明實(shí)施例中,所述第一判斷模塊505在判斷所述第一緩存數(shù)據(jù)中不包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),且所述第四判斷模塊701判斷所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中包含與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)的情況下,通過(guò)所述第四數(shù)據(jù)獲取模塊702從所述后端緩存介質(zhì)的預(yù)設(shè)數(shù)據(jù)中獲取與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù),并在所述第五判斷模塊703判斷所述緩存裝置內(nèi)緩存數(shù)據(jù)的剩余容量值大于獲取到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)所占容量值時(shí),由所述第三緩存模塊704將獲取得到的與所述數(shù)據(jù)獲取指令對(duì)應(yīng)的數(shù)據(jù)進(jìn)行緩存,獲得第三緩存數(shù)據(jù),再由所述第二發(fā)送模塊705將所述第三緩存數(shù)據(jù)發(fā)送到所述客戶(hù)端,進(jìn)而方便客戶(hù)端在后期需要再次訪(fǎng)問(wèn)這些數(shù)據(jù)時(shí),能夠避免網(wǎng)絡(luò)間的緩存調(diào)用,直接從緩存裝置獲取,而在所述緩存裝置無(wú)法全部容納這些對(duì)應(yīng)數(shù)據(jù)時(shí),需要先清理掉部分緩存數(shù)據(jù),以便能夠?qū)⑦@些對(duì)應(yīng)數(shù)據(jù)成功緩存到緩存裝置中,以供用戶(hù)再次訪(fǎng)問(wèn)時(shí)讀取,縮短數(shù)據(jù)響應(yīng)時(shí)間。
對(duì)所公開(kāi)的實(shí)施例的上述說(shuō)明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專(zhuān)業(yè)技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開(kāi)的原理和新穎特點(diǎn)相一致的最寬的范圍。