国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種數(shù)據(jù)讀取時(shí)的緩存管理方法、裝置及系統(tǒng)與流程

      文檔序號(hào):12464296閱讀:207來(lái)源:國(guó)知局
      一種數(shù)據(jù)讀取時(shí)的緩存管理方法、裝置及系統(tǒng)與流程

      本發(fā)明涉及服務(wù)器緩存控制技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)讀取時(shí)的緩存管理方法、裝置及系統(tǒng)。



      背景技術(shù):

      從事分布式存儲(chǔ)產(chǎn)品的客戶端軟件開發(fā)時(shí),往往會(huì)用到緩存的概念,它其實(shí)是程序在內(nèi)存中申請(qǐng)的一塊空間,將用戶將要寫入或者剛剛讀取到的數(shù)據(jù)暫存,既可以提高寫入性能,又能在用戶對(duì)最近訪問(wèn)過(guò)的數(shù)據(jù)再次發(fā)起請(qǐng)求時(shí)迅速返回,降低延遲。

      但是,由于內(nèi)存的大小一般較小,用作緩存的內(nèi)存空間不可能很大,當(dāng)有多個(gè)客戶端進(jìn)行讀取操作時(shí),會(huì)互相爭(zhēng)奪內(nèi)存資源,并且這時(shí)由于需要緩存的數(shù)據(jù)量會(huì)很大,容易導(dǎo)致可用作緩存的空間已滿,而使得部分客戶端無(wú)法進(jìn)行讀取操作的情況出現(xiàn),讀取性能較差。

      因此,如何提供一種讀取性能好的數(shù)據(jù)讀取時(shí)的緩存管理方法、裝置及系統(tǒng)是本領(lǐng)域技術(shù)人員目前需要解決的問(wèn)題。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明的目的是提供一種數(shù)據(jù)讀取時(shí)的緩存管理方法、裝置及系統(tǒng),能夠擴(kuò)展用做數(shù)據(jù)讀取時(shí)的緩存空間的大小,盡可能避免由于多個(gè)客戶端讀取數(shù)據(jù)量較大時(shí)而導(dǎo)致的緩存空間不夠的情況出現(xiàn),提高讀取性能。

      為解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種數(shù)據(jù)讀取時(shí)的緩存管理方法,用于服務(wù)器,所述服務(wù)器內(nèi)預(yù)先設(shè)置有共享內(nèi)存以及與所述共享內(nèi)存連接的次級(jí)硬盤緩存,包括:

      步驟s101:接收客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求,判斷所述共享內(nèi)存中是否完整地存儲(chǔ)有所述客戶端請(qǐng)求讀取的數(shù)據(jù);若是,進(jìn)入步驟s106;若否,進(jìn)入步驟s102;

      步驟s102:計(jì)算所述請(qǐng)求讀取的數(shù)據(jù)中當(dāng)前未存儲(chǔ)于所述共享內(nèi)存內(nèi)的剩余數(shù)據(jù)需占用的內(nèi)存大小,得到剩余內(nèi)存配額;

      步驟s103:從所述共享內(nèi)存內(nèi)選擇與所述剩余內(nèi)存配額大小相同的空閑內(nèi)存作為預(yù)留內(nèi)存,若所述空閑內(nèi)存不能滿足所述剩余內(nèi)存配額,進(jìn)入步驟s104;否則,進(jìn)入步驟s105;

      步驟s104:按照預(yù)設(shè)回收規(guī)則從所述共享內(nèi)存中已經(jīng)占用的內(nèi)存內(nèi)選擇特定大小的內(nèi)存標(biāo)記為待回收內(nèi)存,按照預(yù)設(shè)轉(zhuǎn)移規(guī)則從所述待回收內(nèi)存中選擇部分內(nèi)存中的數(shù)據(jù)拷貝至所述次級(jí)硬盤緩存內(nèi),并釋放所述待回收內(nèi)存;

      步驟s105:判斷所述次級(jí)硬盤緩存內(nèi)是否存有所述剩余數(shù)據(jù),若有,讀取所述剩余數(shù)據(jù)發(fā)送至所述預(yù)留內(nèi)存內(nèi);否則,返回所述預(yù)留內(nèi)存的地址至所述客戶端,供所述客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取所述剩余數(shù)據(jù)并寫入所述預(yù)留內(nèi)存內(nèi);

      步驟s106:將所述共享內(nèi)存中的所述請(qǐng)求讀取的數(shù)據(jù)返回所述客戶端。

      優(yōu)選地,步驟s105的過(guò)程具體為:

      查找所述次級(jí)硬盤緩存內(nèi)的數(shù)據(jù);

      若所述次級(jí)硬盤緩存內(nèi)完整的存有所述剩余數(shù)據(jù),讀取所述剩余數(shù)據(jù)發(fā)送至所述預(yù)留內(nèi)存內(nèi);

      若所述次級(jí)硬盤緩存內(nèi)部分存有所述剩余數(shù)據(jù),將所述次級(jí)硬盤緩存內(nèi)存儲(chǔ)的部分所述剩余數(shù)據(jù)發(fā)送至所述預(yù)留內(nèi)存內(nèi),確定當(dāng)前所述預(yù)留內(nèi)存內(nèi)的空閑部分內(nèi)存的地址并返回所述客戶端,供所述客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取當(dāng)前未存儲(chǔ)于所述預(yù)留內(nèi)存內(nèi)的剩余數(shù)據(jù)并寫入所述預(yù)留內(nèi)存內(nèi)的空閑部分內(nèi)存中;

      若所述次級(jí)硬盤緩存內(nèi)未存有所述剩余數(shù)據(jù),返回所述預(yù)留內(nèi)存的地址至所述客戶端;供所述客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取所述剩余數(shù)據(jù)并寫入所述預(yù)留內(nèi)存內(nèi)。

      優(yōu)選地,所述步驟s102的過(guò)程具體包括:

      計(jì)算并判斷所述請(qǐng)求讀取的數(shù)據(jù)總體需要占用的內(nèi)存大小是否超出預(yù)設(shè)文件大小閾值,若是,返回配額不足的提示至所述客戶端,并終止此次數(shù)據(jù)讀??;否則;計(jì)算所述總體需要占用的內(nèi)存大小與當(dāng)前所述請(qǐng)求讀取的數(shù)據(jù)中已經(jīng)存儲(chǔ)于所述共享內(nèi)存中的部分?jǐn)?shù)據(jù)所占用的內(nèi)存大小之差,得到所述剩余內(nèi)存配額。

      優(yōu)選地,所述共享內(nèi)存按照預(yù)設(shè)大小劃分為若干個(gè)內(nèi)存塊,且每個(gè)所述內(nèi)存塊設(shè)置有引用計(jì)數(shù),所述引用計(jì)數(shù)為當(dāng)前正在訪問(wèn)所述內(nèi)存塊的客戶端的數(shù)量;

      所述預(yù)設(shè)回收規(guī)則具體為:

      將各個(gè)非空閑的所述內(nèi)存塊按照已持續(xù)未被訪問(wèn)的時(shí)間從長(zhǎng)到短進(jìn)行排序,得到使用緩存列表;

      按照所述剩余內(nèi)存配額與當(dāng)前的空閑內(nèi)存之差,從所述緩存列表內(nèi)引用計(jì)數(shù)為0的若干個(gè)內(nèi)存塊中依次選擇特定個(gè)數(shù)的內(nèi)存塊標(biāo)記為待回收內(nèi)存塊。

      為解決上述技術(shù)問(wèn)題,本發(fā)明還提供了一種數(shù)據(jù)讀取時(shí)的緩存管理裝置,用于服務(wù)器,所述服務(wù)器內(nèi)預(yù)先設(shè)置有共享內(nèi)存以及與所述共享內(nèi)存連接的次級(jí)硬盤緩存,包括:

      第一判讀模塊,用于接收客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求,判斷所述共享內(nèi)存中是否完整地存儲(chǔ)有所述客戶端請(qǐng)求讀取的數(shù)據(jù);若是,觸發(fā)數(shù)據(jù)返回模塊;若否,觸發(fā)配額計(jì)算模塊;

      所述配額計(jì)算模塊,用于計(jì)算所述請(qǐng)求讀取的數(shù)據(jù)中當(dāng)前未存儲(chǔ)于所述共享內(nèi)存中的剩余數(shù)據(jù)需占用的內(nèi)存大小,得到剩余內(nèi)存配額;

      預(yù)留內(nèi)存選擇模塊,用于從所述共享內(nèi)存內(nèi)選擇與所述剩余內(nèi)存配額大小相同的空閑內(nèi)存作為預(yù)留內(nèi)存,若所述空閑內(nèi)存不能滿足所述剩余內(nèi)存配額,觸發(fā)回收模塊;否則,觸發(fā)次級(jí)讀取模塊;

      所述回收模塊,用于按照預(yù)設(shè)回收規(guī)則從所述共享內(nèi)存中已經(jīng)占用的內(nèi)存內(nèi)選擇特定大小的內(nèi)存標(biāo)記為待回收內(nèi)存,按照預(yù)設(shè)轉(zhuǎn)移規(guī)則從所述待回收內(nèi)存中選擇部分內(nèi)存中的數(shù)據(jù)拷貝至所述次級(jí)硬盤緩存內(nèi),并釋放所述待回收內(nèi)存;觸發(fā)所述次級(jí)讀取模塊;

      所述次級(jí)讀取模塊,用于判斷所述次級(jí)硬盤緩存內(nèi)是否存有所述剩余數(shù)據(jù),若有,讀取所述剩余數(shù)據(jù)發(fā)送至所述預(yù)留內(nèi)存內(nèi);否則,返回所述預(yù)留內(nèi)存的地址至所述客戶端,供所述客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取所述剩余數(shù)據(jù)并寫入所述預(yù)留內(nèi)存內(nèi);觸發(fā)所述數(shù)據(jù)返回模塊;

      所述數(shù)據(jù)返回模塊,用于將所述共享內(nèi)存中的所述請(qǐng)求讀取的數(shù)據(jù)返回所述客戶端。

      所述次級(jí)讀取模塊具體用于:

      查找所述次級(jí)硬盤緩存內(nèi)的數(shù)據(jù);若所述次級(jí)硬盤緩存內(nèi)完整的存有所述剩余數(shù)據(jù),讀取所述剩余數(shù)據(jù)發(fā)送至所述預(yù)留內(nèi)存內(nèi);若所述次級(jí)硬盤緩存內(nèi)部分存有所述剩余數(shù)據(jù),將所述次級(jí)硬盤緩存內(nèi)存儲(chǔ)的部分所述剩余數(shù)據(jù)發(fā)送至所述預(yù)留內(nèi)存內(nèi),確定當(dāng)前所述預(yù)留內(nèi)存內(nèi)的空閑部分內(nèi)存的地址并返回所述客戶端,供所述客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取當(dāng)前未存儲(chǔ)于所述預(yù)留內(nèi)存內(nèi)的剩余數(shù)據(jù)并寫入所述預(yù)留內(nèi)存內(nèi)的空閑部分內(nèi)存中;若所述次級(jí)硬盤緩存內(nèi)未存有所述剩余數(shù)據(jù),返回所述預(yù)留內(nèi)存的地址至所述客戶端;供所述客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取所述剩余數(shù)據(jù)并寫入所述預(yù)留內(nèi)存內(nèi);觸發(fā)所述數(shù)據(jù)返回模塊。

      優(yōu)選地,所述次級(jí)硬盤緩存具體為固態(tài)硬盤。

      為解決上述技術(shù)問(wèn)題,本發(fā)明還提供了一種數(shù)據(jù)讀取時(shí)的緩存管理系統(tǒng),用于服務(wù)器,包括共享內(nèi)存、與所述共享內(nèi)存連接的次級(jí)硬盤緩存、后端存儲(chǔ)設(shè)備以及如以上任一項(xiàng)所述的緩存管理裝置。

      本發(fā)明提供了一種數(shù)據(jù)讀取時(shí)的緩存管理方法、裝置及系統(tǒng),在服務(wù)器內(nèi)設(shè)置有次級(jí)硬件緩存;當(dāng)共享內(nèi)存內(nèi)不完全包含有用戶讀取的數(shù)據(jù)且空間內(nèi)存不夠的情況下,選擇部分內(nèi)存空間進(jìn)行釋放,并且為避免釋放有用數(shù)據(jù),從待釋放的數(shù)據(jù)中選擇部分內(nèi)存的數(shù)據(jù)存入次級(jí)硬件緩存內(nèi);當(dāng)數(shù)據(jù)讀取時(shí),首先查看共享內(nèi)存內(nèi)的數(shù)據(jù),然后查看次級(jí)硬件緩存內(nèi)的數(shù)據(jù),若所需的數(shù)據(jù)仍然不完整,再由用戶讀取后端存儲(chǔ)設(shè)備。由于硬件獨(dú)立于內(nèi)存,且硬件空間要遠(yuǎn)大于內(nèi)存空間,故本發(fā)明擴(kuò)展了能夠用做數(shù)據(jù)讀取時(shí)的緩存空間的大小,盡可能避免了由于多個(gè)客戶端讀取數(shù)據(jù)量較大時(shí)而導(dǎo)致的緩存空間不夠的情況出現(xiàn),提高了讀取性能。

      附圖說(shuō)明

      為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)現(xiàn)有技術(shù)和實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

      圖1為本發(fā)明提供的一種數(shù)據(jù)讀取時(shí)的緩存管理方法的過(guò)程的流程圖;

      圖2為本發(fā)明提供的一種數(shù)據(jù)讀取時(shí)的緩存管理裝置的結(jié)構(gòu)示意圖。

      具體實(shí)施方式

      本發(fā)明的核心是提供一種數(shù)據(jù)讀取時(shí)的緩存管理方法、裝置及系統(tǒng),能夠擴(kuò)展用做數(shù)據(jù)讀取時(shí)的緩存空間的大小,盡可能避免由于多個(gè)客戶端讀取數(shù)據(jù)量較大時(shí)而導(dǎo)致的緩存空間不夠的情況出現(xiàn),提高讀取性能。

      為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(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ù)的范圍。

      本發(fā)明提供了一種數(shù)據(jù)讀取時(shí)的緩存管理方法,用于服務(wù)器,服務(wù)器內(nèi)預(yù)先設(shè)置有共享內(nèi)存以及與共享內(nèi)存連接的次級(jí)硬盤緩存,參見(jiàn)圖1所示,圖1為本發(fā)明提供的一種數(shù)據(jù)讀取時(shí)的緩存管理方法的過(guò)程的流程圖;該方法包括:

      步驟s101:接收客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求,判斷共享內(nèi)存中是否完整地存儲(chǔ)有客戶端請(qǐng)求讀取的數(shù)據(jù);若是,進(jìn)入步驟s106;若否,進(jìn)入步驟s102;

      可以理解的是,相比目前采用的分別為每個(gè)客戶端分配一塊內(nèi)存的方式,本發(fā)明采用共享內(nèi)存的形式,能夠避免同一份數(shù)據(jù)多次存儲(chǔ)導(dǎo)致的數(shù)據(jù)冗余的情況;所有客戶端均訪問(wèn)同一塊共享內(nèi)存,若共享內(nèi)存內(nèi)緩存有客戶端訪問(wèn)的數(shù)據(jù),則直接返回相應(yīng)的數(shù)據(jù),不再讀取后端存儲(chǔ)設(shè)備,也提高了數(shù)據(jù)訪問(wèn)的速度以及減少了訪問(wèn)進(jìn)程所占用的資源,并且減少了占用內(nèi)存的大小。

      步驟s102:計(jì)算請(qǐng)求讀取的數(shù)據(jù)中當(dāng)前未存儲(chǔ)于共享內(nèi)存內(nèi)的剩余數(shù)據(jù)需占用的內(nèi)存大小,得到剩余內(nèi)存配額;

      步驟s103:從共享內(nèi)存內(nèi)選擇與剩余內(nèi)存配額大小相同的空閑內(nèi)存作為預(yù)留內(nèi)存,若空閑內(nèi)存不能滿足剩余內(nèi)存配額,進(jìn)入步驟s104;否則,進(jìn)入步驟s105;

      由于數(shù)據(jù)從后端存儲(chǔ)設(shè)備讀取過(guò)來(lái)之后,需要首先存儲(chǔ)至共享內(nèi)存內(nèi),故需要共享內(nèi)存內(nèi)具有足夠大小的空閑內(nèi)存。

      步驟s104:按照預(yù)設(shè)回收規(guī)則從共享內(nèi)存中已經(jīng)占用的內(nèi)存內(nèi)選擇特定大小的內(nèi)存標(biāo)記為待回收內(nèi)存,按照預(yù)設(shè)轉(zhuǎn)移規(guī)則從待回收內(nèi)存中選擇部分內(nèi)存中的數(shù)據(jù)拷貝至次級(jí)硬盤緩存內(nèi),并釋放待回收內(nèi)存;

      可以理解的是,這里的特定大小與共享內(nèi)存內(nèi)當(dāng)前的空閑內(nèi)存之和不能小于剩余內(nèi)存配額,一般要略大于剩余內(nèi)存配額,具體大小的選擇可根據(jù)實(shí)驗(yàn)后的結(jié)果進(jìn)行設(shè)定,本發(fā)明對(duì)此不做限定。并且,這些待回收內(nèi)存此時(shí)其實(shí)并不符合原始設(shè)定的回收條件,故其內(nèi)部可能存有較為重要的數(shù)據(jù),為避免必要數(shù)據(jù)丟失,故需要按照預(yù)設(shè)轉(zhuǎn)移規(guī)則選擇出部分待回收內(nèi)存內(nèi)的數(shù)據(jù),存儲(chǔ)至次級(jí)硬盤緩存內(nèi),再將待回收內(nèi)存釋放。

      另外,次級(jí)硬盤緩存中存有之前轉(zhuǎn)移的數(shù)據(jù),能夠作為一個(gè)備用的數(shù)據(jù)存儲(chǔ)內(nèi)存供客戶端查詢。

      步驟s105:判斷次級(jí)硬盤緩存內(nèi)是否存有剩余數(shù)據(jù),若有,讀取剩余數(shù)據(jù)發(fā)送至預(yù)留內(nèi)存內(nèi);否則,返回預(yù)留內(nèi)存的地址至客戶端,供客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取剩余數(shù)據(jù)并寫入預(yù)留內(nèi)存內(nèi);

      步驟s106:將共享內(nèi)存中的請(qǐng)求讀取的數(shù)據(jù)返回客戶端。

      其中,步驟s105的過(guò)程具體為:

      步驟s501:查找次級(jí)硬盤緩存內(nèi)的數(shù)據(jù);

      步驟s502:若次級(jí)硬盤緩存內(nèi)完整的存有剩余數(shù)據(jù),讀取剩余數(shù)據(jù)發(fā)送至預(yù)留內(nèi)存內(nèi);

      步驟s503:若次級(jí)硬盤緩存內(nèi)部分存有剩余數(shù)據(jù),將次級(jí)硬盤緩存內(nèi)存儲(chǔ)的部分剩余數(shù)據(jù)發(fā)送至預(yù)留內(nèi)存內(nèi),確定當(dāng)前預(yù)留內(nèi)存內(nèi)的空閑部分內(nèi)存的地址并返回客戶端,供客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取當(dāng)前未存儲(chǔ)于預(yù)留內(nèi)存內(nèi)的剩余數(shù)據(jù)并寫入預(yù)留內(nèi)存內(nèi)的空閑部分內(nèi)存中;

      可以理解的是,次級(jí)硬盤緩存內(nèi)也不一定完整的存儲(chǔ)有需要的剩余數(shù)據(jù),故此時(shí)仍需要客戶端訪問(wèn)后端存儲(chǔ)設(shè)備來(lái)讀取共享內(nèi)存以及次級(jí)硬盤緩存內(nèi)均未存儲(chǔ)的部分,該操作減少了客戶端需要讀取的數(shù)據(jù)的大小。

      步驟s504:若次級(jí)硬盤緩存內(nèi)未存有剩余數(shù)據(jù),返回預(yù)留內(nèi)存的地址至客戶端;供客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取剩余數(shù)據(jù)并寫入預(yù)留內(nèi)存內(nèi)。

      需要注意的是,步驟s501、步驟s502、步驟s503無(wú)先后順序之分,僅視次級(jí)硬盤緩存內(nèi)的存儲(chǔ)情況而定。

      另外,步驟s102的過(guò)程具體包括:

      計(jì)算并判斷請(qǐng)求讀取的數(shù)據(jù)總體需要占用的內(nèi)存大小是否超出預(yù)設(shè)文件大小閾值,若是,返回配額不足的提示至客戶端,并終止此次數(shù)據(jù)讀取;否則;計(jì)算總體需要占用的內(nèi)存大小與當(dāng)前請(qǐng)求讀取的數(shù)據(jù)中已經(jīng)存儲(chǔ)于共享內(nèi)存中的部分?jǐn)?shù)據(jù)所占用的內(nèi)存大小之差,得到剩余內(nèi)存配額。

      可以理解的是,客戶端每次讀取的數(shù)據(jù)總體大小應(yīng)不超過(guò)一個(gè)預(yù)設(shè)文件大小閾值。當(dāng)共享內(nèi)存中已經(jīng)存有部分請(qǐng)求讀取的數(shù)據(jù)時(shí),若此時(shí)請(qǐng)求讀取的數(shù)據(jù)總體大于預(yù)設(shè)文件大小閾值,則表明即使從后端存儲(chǔ)設(shè)備獲取了剩余的部分?jǐn)?shù)據(jù),也沒(méi)有辦法存入共享內(nèi)存內(nèi),應(yīng)為該請(qǐng)求讀取的數(shù)據(jù)整體過(guò)大。當(dāng)然,若該數(shù)據(jù)已經(jīng)完整的存在共享內(nèi)存中了,則默認(rèn)該數(shù)據(jù)并未超出預(yù)設(shè)文件大小閾值。這里的預(yù)設(shè)文件大小閾值的具體大小可自由設(shè)定。

      作為優(yōu)選地,共享內(nèi)存按照預(yù)設(shè)大小劃分為若干個(gè)內(nèi)存塊,且每個(gè)內(nèi)存塊設(shè)置有引用計(jì)數(shù),引用計(jì)數(shù)為當(dāng)前正在訪問(wèn)內(nèi)存塊的客戶端的數(shù)量;

      這里的預(yù)設(shè)回收規(guī)則具體為:

      將各個(gè)非空閑的內(nèi)存塊按照已持續(xù)未被訪問(wèn)的時(shí)間從長(zhǎng)到短進(jìn)行排序,得到使用緩存列表;

      按照剩余內(nèi)存配額與當(dāng)前的空閑內(nèi)存之差,從緩存列表內(nèi)引用計(jì)數(shù)為0的若干個(gè)內(nèi)存塊中依次選擇特定個(gè)數(shù)的內(nèi)存塊標(biāo)記為待回收內(nèi)存塊。

      可以理解的是,若引用計(jì)數(shù)不為0,表明當(dāng)前有客戶端正在訪問(wèn)該內(nèi)存塊,此時(shí)不能對(duì)該內(nèi)存塊進(jìn)行釋放。一般需要釋放的內(nèi)存塊為長(zhǎng)期未被訪問(wèn)的內(nèi)存塊,故應(yīng)從緩存列表中按照未被訪問(wèn)的時(shí)間從長(zhǎng)到短的順序選擇待回收的內(nèi)存塊。

      本發(fā)明提供了一種數(shù)據(jù)讀取時(shí)的緩存管理裝置,在服務(wù)器內(nèi)設(shè)置有次級(jí)硬件緩存;當(dāng)共享內(nèi)存內(nèi)不完全包含有用戶讀取的數(shù)據(jù)且空間內(nèi)存不夠的情況下,選擇部分內(nèi)存空間進(jìn)行釋放,并且為避免釋放有用數(shù)據(jù),從待釋放的數(shù)據(jù)中選擇部分內(nèi)存的數(shù)據(jù)存入次級(jí)硬件緩存內(nèi);當(dāng)數(shù)據(jù)讀取時(shí),首先查看共享內(nèi)存內(nèi)的數(shù)據(jù),然后查看次級(jí)硬件緩存內(nèi)的數(shù)據(jù),若所需的數(shù)據(jù)仍然不完整,再由用戶讀取后端存儲(chǔ)設(shè)備。由于硬件獨(dú)立于內(nèi)存,且硬件空間要遠(yuǎn)大于內(nèi)存空間,故本發(fā)明擴(kuò)展了能夠用做數(shù)據(jù)讀取時(shí)的緩存空間的大小,盡可能避免了由于多個(gè)客戶端讀取數(shù)據(jù)量較大時(shí)而導(dǎo)致的緩存空間不夠的情況出現(xiàn),提高了讀取性能。

      本發(fā)明還提供了一種數(shù)據(jù)讀取時(shí)的緩存管理裝置,用于服務(wù)器,服務(wù)器內(nèi)預(yù)先設(shè)置有共享內(nèi)存以及與共享內(nèi)存連接的次級(jí)硬盤緩存,參見(jiàn)圖2所示,圖2為本發(fā)明提供的一種數(shù)據(jù)讀取時(shí)的緩存管理裝置的結(jié)構(gòu)示意圖。該裝置包括:

      第一判讀模塊1,用于接收客戶端發(fā)送的數(shù)據(jù)讀取請(qǐng)求,判斷共享內(nèi)存中是否完整地存儲(chǔ)有客戶端請(qǐng)求讀取的數(shù)據(jù);若是,觸發(fā)數(shù)據(jù)返回模塊6;若否,觸發(fā)配額計(jì)算模塊2;

      配額計(jì)算模塊2,用于計(jì)算請(qǐng)求讀取的數(shù)據(jù)中當(dāng)前未存儲(chǔ)于共享內(nèi)存中的剩余數(shù)據(jù)需占用的內(nèi)存大小,得到剩余內(nèi)存配額;

      預(yù)留內(nèi)存選擇模塊3,用于從共享內(nèi)存內(nèi)選擇與剩余內(nèi)存配額大小相同的空閑內(nèi)存作為預(yù)留內(nèi)存,若空閑內(nèi)存不能滿足剩余內(nèi)存配額,觸發(fā)回收模塊4;否則,觸發(fā)次級(jí)讀取模塊5;

      回收模塊4,用于按照預(yù)設(shè)回收規(guī)則從共享內(nèi)存中已經(jīng)占用的內(nèi)存內(nèi)選擇特定大小的內(nèi)存標(biāo)記為待回收內(nèi)存,按照預(yù)設(shè)轉(zhuǎn)移規(guī)則從待回收內(nèi)存中選擇部分內(nèi)存中的數(shù)據(jù)拷貝至次級(jí)硬盤緩存內(nèi),并釋放待回收內(nèi)存;觸發(fā)次級(jí)讀取模塊5;

      次級(jí)讀取模塊5,用于判斷次級(jí)硬盤緩存內(nèi)是否存有剩余數(shù)據(jù),若有,讀取剩余數(shù)據(jù)發(fā)送至預(yù)留內(nèi)存內(nèi);否則,返回預(yù)留內(nèi)存的地址至客戶端,供客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取剩余數(shù)據(jù)并寫入預(yù)留內(nèi)存內(nèi);觸發(fā)數(shù)據(jù)返回模塊6;

      數(shù)據(jù)返回模塊6,用于將共享內(nèi)存中的請(qǐng)求讀取的數(shù)據(jù)返回客戶端。

      作為優(yōu)選地,次級(jí)讀取模塊5具體用于:

      查找次級(jí)硬盤緩存內(nèi)的數(shù)據(jù);若次級(jí)硬盤緩存內(nèi)完整的存有剩余數(shù)據(jù),讀取剩余數(shù)據(jù)發(fā)送至預(yù)留內(nèi)存內(nèi);若次級(jí)硬盤緩存內(nèi)部分存有剩余數(shù)據(jù),將次級(jí)硬盤緩存內(nèi)存儲(chǔ)的部分剩余數(shù)據(jù)發(fā)送至預(yù)留內(nèi)存內(nèi),確定當(dāng)前預(yù)留內(nèi)存內(nèi)的空閑部分內(nèi)存的地址并返回客戶端,供客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取當(dāng)前未存儲(chǔ)于預(yù)留內(nèi)存內(nèi)的剩余數(shù)據(jù)并寫入預(yù)留內(nèi)存內(nèi)的空閑部分內(nèi)存中;若次級(jí)硬盤緩存內(nèi)未存有剩余數(shù)據(jù),返回預(yù)留內(nèi)存的地址至客戶端;供客戶端從后端存儲(chǔ)設(shè)備內(nèi)讀取剩余數(shù)據(jù)并寫入預(yù)留內(nèi)存內(nèi);觸發(fā)數(shù)據(jù)返回模塊6。

      其中,這里的次級(jí)硬盤緩存具體為固態(tài)硬盤。當(dāng)然,也可以選用其他類型的硬盤,本發(fā)明對(duì)此不做限定。

      本發(fā)明提供了一種數(shù)據(jù)讀取時(shí)的緩存管理裝置,在服務(wù)器內(nèi)設(shè)置有次級(jí)硬件緩存;當(dāng)共享內(nèi)存內(nèi)不完全包含有用戶讀取的數(shù)據(jù)且空間內(nèi)存不夠的情況下,選擇部分內(nèi)存空間進(jìn)行釋放,并且為避免釋放有用數(shù)據(jù),從待釋放的數(shù)據(jù)中選擇部分內(nèi)存的數(shù)據(jù)存入次級(jí)硬件緩存內(nèi);當(dāng)數(shù)據(jù)讀取時(shí),首先查看共享內(nèi)存內(nèi)的數(shù)據(jù),然后查看次級(jí)硬件緩存內(nèi)的數(shù)據(jù),若所需的數(shù)據(jù)仍然不完整,再由用戶讀取后端存儲(chǔ)設(shè)備。由于硬件獨(dú)立于內(nèi)存,且硬件空間要遠(yuǎn)大于內(nèi)存空間,故本發(fā)明擴(kuò)展了能夠用做數(shù)據(jù)讀取時(shí)的緩存空間的大小,盡可能避免了由于多個(gè)客戶端讀取數(shù)據(jù)量較大時(shí)而導(dǎo)致的緩存空間不夠的情況出現(xiàn),提高了讀取性能。

      本發(fā)明還提供了一種數(shù)據(jù)讀取時(shí)的緩存管理系統(tǒng),用于服務(wù)器,包括共享內(nèi)存、與共享內(nèi)存連接的次級(jí)硬盤緩存、后端存儲(chǔ)設(shè)備以及以上緩存管理裝置。

      本說(shuō)明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見(jiàn)即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法部分說(shuō)明即可。

      還需要說(shuō)明的是,在本說(shuō)明書中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。

      對(duì)所公開的實(shí)施例的上述說(shuō)明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其他實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。

      當(dāng)前第1頁(yè)1 2 3 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1