數(shù)據(jù)緩存系統(tǒng)和數(shù)據(jù)緩存方法
【專利摘要】本發(fā)明提供了一種數(shù)據(jù)緩存系統(tǒng)和一種數(shù)據(jù)緩存方法,其中,該數(shù)據(jù)緩存系統(tǒng)包括:緩存劃分單元,用于查詢待存儲(chǔ)數(shù)據(jù)的類型,為每個(gè)類型的數(shù)據(jù)設(shè)置相應(yīng)的標(biāo)識(shí),并為所述每個(gè)類型的數(shù)據(jù)分別劃分相應(yīng)的緩存區(qū)域;存儲(chǔ)單元,用于將每個(gè)緩存區(qū)域中的數(shù)據(jù)存儲(chǔ)存至操作系統(tǒng)的內(nèi)存中,并將所述每個(gè)緩存區(qū)域中的數(shù)據(jù)分別對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⒋鎯?chǔ)至虛擬機(jī)的內(nèi)存中。通過(guò)本申請(qǐng)的技術(shù)方案,能夠在進(jìn)行大內(nèi)存緩存的情況下,將KEY值集合與真實(shí)數(shù)據(jù)分離存儲(chǔ),并實(shí)現(xiàn)緩存數(shù)據(jù)版本控制和自動(dòng)更新檔案級(jí)別的監(jiān)聽(tīng)器,以及提高監(jiān)控粒度。
【專利說(shuō)明】數(shù)據(jù)緩存系統(tǒng)和數(shù)據(jù)緩存方法【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲(chǔ)【技術(shù)領(lǐng)域】,具體而言,涉及一種數(shù)據(jù)緩存系統(tǒng)和一種數(shù)據(jù)緩存方法。
【背景技術(shù)】
[0002]在越來(lái)越多的J2EE應(yīng)用中,利用緩存技術(shù)存儲(chǔ)業(yè)務(wù)數(shù)據(jù)以減少頻繁數(shù)據(jù)庫(kù)鏈接造成的資源消耗的技術(shù)應(yīng)用愈加普遍。
[0003]由于內(nèi)存對(duì)于數(shù)據(jù)的讀寫速度是數(shù)據(jù)庫(kù)操作等硬盤讀寫速度的100倍甚至更高,所以內(nèi)存緩存可以有效的提升運(yùn)行效率。業(yè)界比較流行的緩存技術(shù)也都對(duì)內(nèi)存緩存做了實(shí)現(xiàn),較為常見(jiàn)的如EhCache、OSCache> JbossCache、MemCache等。各種緩存技術(shù)各有所長(zhǎng),適合不同業(yè)務(wù)場(chǎng)景。
[0004]業(yè)務(wù)上常常把數(shù)據(jù)量大、變化性小的一類數(shù)據(jù)歸為一類檔案數(shù)據(jù),各類檔案數(shù)據(jù)分別維護(hù)和使用,更加清晰、簡(jiǎn)潔。例如公文、人員身份、幣種、郵編、地區(qū)名稱等。這些數(shù)據(jù)都是變化小又經(jīng)常會(huì)使用到的檔案數(shù)據(jù),不應(yīng)該在每次查詢時(shí)進(jìn)行數(shù)據(jù)庫(kù)操作,更適合利用緩存來(lái)存儲(chǔ)??梢栽趦?nèi)存中申請(qǐng)幾塊緩存區(qū)域,分別存儲(chǔ)各類檔案的數(shù)據(jù)和各次查詢的結(jié)果。較為常見(jiàn)的使用方式(人員參照)如圖1A所示。
[0005]對(duì)人員檔案數(shù)據(jù)的查找功能,每查詢的數(shù)據(jù)變化性不大,數(shù)據(jù)總量較大,適用緩存來(lái)存儲(chǔ)常用的數(shù)據(jù)和查詢結(jié)果,以便下次查詢是快速定位。
[0006]然而,對(duì)于此類應(yīng)用場(chǎng)景,以上的緩存技術(shù)并沒(méi)有太合適的解決方案,逐步顯現(xiàn)出一些問(wèn)題,諸如:緩存數(shù)據(jù)量較大時(shí)占用JVM虛擬機(jī)緩存太大,影響JVM運(yùn)行;檔案類數(shù)據(jù)量大,適合用大內(nèi)存來(lái)存儲(chǔ),各技術(shù)對(duì)大內(nèi)存支持的不完善;緩存區(qū)域數(shù)據(jù)偏大時(shí),對(duì)Cache數(shù)據(jù)頻繁序列化引起 的效率問(wèn)題;緩存數(shù)據(jù)的版本監(jiān)控與數(shù)據(jù)變化時(shí)自動(dòng)更新問(wèn)題針對(duì)具體檔案數(shù)據(jù)的緩存監(jiān)控問(wèn)題。
[0007]大多緩存技術(shù)中采用的是JVM虛擬機(jī)內(nèi)存的方式來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ),如果針對(duì)數(shù)量不大的數(shù)據(jù),此方式比較適合且存取速率較快。常用緩存技術(shù)內(nèi)存使用情況如圖1B所示。
[0008]但是JVM對(duì)內(nèi)存的使用有最大值限制,一般最優(yōu)的空間并不是很大。如果是檔案類數(shù)據(jù),數(shù)據(jù)量較大,如果設(shè)置的緩存區(qū)域空間較小,會(huì)頻繁的根據(jù)緩存策略進(jìn)行數(shù)據(jù)的淘汰;如果設(shè)置緩存空間過(guò)大,又會(huì)影響JVM本身的運(yùn)行。
[0009]利用NC63中提供的大內(nèi)存緩存技術(shù),采用JVM之外的操作系統(tǒng)級(jí)內(nèi)存存儲(chǔ)緩存數(shù)據(jù),充分利用了服務(wù)器高配置的大內(nèi)存空間。且隨著硬件技術(shù)的發(fā)展,64位計(jì)算機(jī)漸漸占據(jù)主流,服務(wù)器配置越來(lái)越高,內(nèi)存的容量也很大,滿足大內(nèi)存的緩存需要。內(nèi)存使用情況如上面右側(cè)示意圖所示。
[0010]使用大內(nèi)存緩存技術(shù)的優(yōu)勢(shì)顯而易見(jiàn),然而在檔案類數(shù)據(jù)緩存過(guò)程中的問(wèn)題也隨之而來(lái),主要體現(xiàn)在以下兩個(gè)方面:
[0011]問(wèn)題一:緩存區(qū)域的劃分與數(shù)據(jù)序列化與反序列化問(wèn)題。
[0012]緩存的調(diào)用通常有統(tǒng)一的入口,類似CacheManager。入口根據(jù)緩存區(qū)域的名字對(duì)Cache進(jìn)行獲取操作。緩存的使用方式一般如下:
[0013]//獲取緩存區(qū)
[0014]Cache cache=CacheManager. getCache (,cacheName);
[0015]//放置緩存數(shù)據(jù)
[0016]cache, put (key, obj);
[0017]//獲取緩存數(shù)據(jù)
[0018]cahce. get (key);
[0019]如果動(dòng)態(tài)的為每類檔案申請(qǐng)ー塊緩存區(qū)域的話,即每個(gè)cacheName對(duì)應(yīng)ー類檔案(一個(gè)Cache對(duì)應(yīng)一個(gè)cacheconfig,即分配一塊內(nèi)存區(qū)域),大內(nèi)存的總量不容易控制??紤]到對(duì)緩存數(shù)據(jù)總量的限制,不能每ー類檔案數(shù)真實(shí)的分配ー塊大內(nèi)存區(qū)域。
[0020]一般緩存方案的存儲(chǔ)方式應(yīng)該是一個(gè)緩存區(qū)域中存放多個(gè)Map,每個(gè)Map中存放具體某ー類型的檔案數(shù)據(jù)。
[0021]如圖IC所示,如果使用的是操作系統(tǒng)內(nèi)存(大內(nèi)存)存儲(chǔ)的數(shù)據(jù),每個(gè)Map對(duì)應(yīng)ー類檔案數(shù)據(jù),在get的時(shí)候,cacheName為檔案的編碼,獲取結(jié)果為一類檔案的緩存,由java對(duì)象轉(zhuǎn)化到大內(nèi)存中時(shí)需要進(jìn)行對(duì)象的序列化;同理,由已經(jīng)緩存在大內(nèi)存的數(shù)據(jù)轉(zhuǎn)化成java對(duì)象的時(shí)候,需要進(jìn)行反序列化。序列化與反序列化的過(guò)程是高消耗的,對(duì)CPU和服務(wù)器都有壓力,頻繁的進(jìn)行此操作勢(shì)必造成效率問(wèn)題,甚至?xí)陀跀?shù)據(jù)庫(kù)的存儲(chǔ)。
[0022]例如:如果緩存區(qū)(ca`che)的占用空間較大(如2G),則姆次調(diào)用getCache (key)方法獲取ー類檔案緩存的Map對(duì)象時(shí)都要對(duì)數(shù)據(jù)進(jìn)行一次序列化或者反序列化動(dòng)作,消耗CPU等資源。
[0023]另外在緩存監(jiān)控方面,常用的緩存技術(shù)監(jiān)控的粒度在Cache級(jí)別,即整個(gè)緩存區(qū)域的大小、命中率、刷新次數(shù)等特性。針對(duì)此類檔案數(shù)據(jù)的監(jiān)控業(yè)務(wù),監(jiān)控的層次較籠統(tǒng)。
[0024]只能監(jiān)控到整體檔案總Cache的使用情況,不利于對(duì)各種類型的檔案數(shù)據(jù)緩存情況進(jìn)行分別監(jiān)控。
[0025]所以以上的多類檔案數(shù)據(jù)直接存儲(chǔ)在ー個(gè)大內(nèi)存的Cache中的方式不可取。這也是本專利方案需要解決的問(wèn)題之一。
[0026]須解決問(wèn)題二 :緩存數(shù)據(jù)版本的控制和更新。
[0027]緩存數(shù)據(jù)版本問(wèn)題一直是緩存技術(shù)需要解決的問(wèn)題之一,一般情況是設(shè)置刷新時(shí)間,每隔一段時(shí)間進(jìn)行一次緩存數(shù)據(jù)的清理。設(shè)置方式通常如下:
[0028]〈property name="flushInterval"value="3000"/>
[0029]針對(duì)檔案類數(shù)據(jù)數(shù)據(jù)量大、變化性不大的特點(diǎn),如果刷新間隔設(shè)置的太大,則數(shù)據(jù)的真確性會(huì)有延遲,如果時(shí)間較短,大量數(shù)據(jù)會(huì)被清除掉,緩存特性利用不充分。所以此種緩存更新策略不太適合檔案數(shù)據(jù)的緩存。
【發(fā)明內(nèi)容】
[0030]本發(fā)明正是基于上述問(wèn)題,提出了ー種數(shù)據(jù)緩存技術(shù),能夠在進(jìn)行大內(nèi)存緩存的情況下,將KEY值集合與真實(shí)數(shù)據(jù)分離存儲(chǔ),并實(shí)現(xiàn)緩存數(shù)據(jù)版本控制和自動(dòng)更新檔案級(jí)別的監(jiān)聽(tīng)器,以及提高監(jiān)控粒度。
[0031]有鑒于此,本發(fā)明提出了ー種數(shù)據(jù)緩存系統(tǒng),包括:緩存劃分単元,用于查詢待存儲(chǔ)數(shù)據(jù)的類型,為每個(gè)類型的數(shù)據(jù)設(shè)置相應(yīng)的標(biāo)識(shí),并為所述每個(gè)類型的數(shù)據(jù)分別劃分相應(yīng)的緩存區(qū)域;存儲(chǔ)單元,用于將每個(gè)緩存區(qū)域中的數(shù)據(jù)存儲(chǔ)存至操作系統(tǒng)的內(nèi)存中,并將所述每個(gè)緩存區(qū)域中的數(shù)據(jù)分別對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⒋鎯?chǔ)至虛擬機(jī)的內(nèi)存中。
[0032]在上述技術(shù)方案中,優(yōu)選地,還包括:監(jiān)聽(tīng)單元,設(shè)置于所述每個(gè)類型的數(shù)據(jù)分別對(duì)應(yīng)的緩存區(qū)域中,用于分別監(jiān)聽(tīng)所述每個(gè)類型的數(shù)據(jù)的版本信息;緩存刷新單元,用于在所述監(jiān)聽(tīng)單元監(jiān)聽(tīng)到所述版本信息發(fā)生變化時(shí),根據(jù)變化的版本信息刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
[0033]在上述技術(shù)方案中,優(yōu)選地,所述監(jiān)聽(tīng)單元用于實(shí)時(shí)監(jiān)聽(tīng)相應(yīng)類型的數(shù)據(jù)的檔案數(shù)據(jù),并根據(jù)所述檔案數(shù)據(jù)的變化獲取更新的版本;所述緩存刷新單元根據(jù)所述更新的版本刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
[0034]在上述技術(shù)方案中,優(yōu)選地,所述監(jiān)聽(tīng)單元還用于記錄相應(yīng)類型數(shù)據(jù)的檔案數(shù)據(jù)、所占緩存區(qū)域的大小、被訪問(wèn)的次數(shù)、和/或被命中的次數(shù)。
[0035]在上述技術(shù)方案中,優(yōu)選地,所述監(jiān)聽(tīng)單元還用于根據(jù)相應(yīng)的標(biāo)識(shí)判斷相應(yīng)類型的數(shù)據(jù)是否已緩存至相應(yīng)的緩存區(qū)域,若沒(méi)有緩存,則根據(jù)所述相應(yīng)的標(biāo)識(shí)獲取所述相應(yīng)類型的數(shù)據(jù),根據(jù)所述相應(yīng)的標(biāo)識(shí)將所述相應(yīng)類型的數(shù)據(jù)寫入相應(yīng)的緩存區(qū)域,并將所述相應(yīng)類型的數(shù)據(jù)進(jìn)行序列化,以存儲(chǔ)至所述操作系統(tǒng)的內(nèi)存中,同時(shí)將所述相應(yīng)類型的數(shù)據(jù)對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⑦M(jìn)行序列化,以存儲(chǔ)至所述虛擬機(jī)的內(nèi)存中。
[0036]本申請(qǐng)還提出了一種數(shù)據(jù)緩存方法,包括:步驟202,查詢待存儲(chǔ)數(shù)據(jù)的類型,為每個(gè)類型的數(shù)據(jù)設(shè)置相應(yīng)的標(biāo)識(shí),并為所述每個(gè)類型的數(shù)據(jù)分別劃分相應(yīng)的緩存區(qū)域;步驟204,將每個(gè)緩存區(qū)域中的數(shù)據(jù)存儲(chǔ)存至操作系統(tǒng)的內(nèi)存中,并將所述每個(gè)緩存區(qū)域中的數(shù)據(jù)分別對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⒋鎯?chǔ)至虛擬機(jī)的內(nèi)存中。
[0037]在上述技術(shù)方案中,優(yōu)選地,還包括:步驟206,根據(jù)所述每個(gè)類型的數(shù)據(jù)分別對(duì)應(yīng)的緩存區(qū)域中的監(jiān)聽(tīng)器,分別監(jiān)聽(tīng)所述每個(gè)類型的數(shù)據(jù)的版本信息,并在所述版本信息發(fā)生變化時(shí),根據(jù)變化的版本信息刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
[0038]在上述技術(shù)方案中,優(yōu)選地,所述步驟206包括:通過(guò)所述監(jiān)聽(tīng)器實(shí)時(shí)監(jiān)聽(tīng)相應(yīng)類型的數(shù)據(jù)的檔案數(shù)據(jù),并根據(jù)所述檔案數(shù)據(jù)的變化獲取更新的版本,根據(jù)所述更新的版本刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
[0039]在上述技術(shù)方案中,優(yōu)選地,還包括:通過(guò)所述監(jiān)聽(tīng)器記錄相應(yīng)類型數(shù)據(jù)的檔案數(shù)據(jù)、所占緩存區(qū)域的大小、被訪問(wèn)的次數(shù)、被命中的次數(shù)。
[0040]在上述技術(shù)方案中,優(yōu)選地,還包括:所述監(jiān)聽(tīng)器根據(jù)相應(yīng)的標(biāo)識(shí)判斷相應(yīng)類型的數(shù)據(jù)是否已緩存至相應(yīng)的緩存區(qū)域,若沒(méi)有緩存,則根據(jù)所述相應(yīng)的標(biāo)識(shí)獲取所述相應(yīng)類型的數(shù)據(jù),根據(jù)所述相應(yīng)的標(biāo)識(shí)將所述相應(yīng)類型的數(shù)據(jù)寫入相應(yīng)的緩存區(qū)域,并將所述相應(yīng)類型的數(shù)據(jù)進(jìn)行序列化,以存儲(chǔ)至所述操作系統(tǒng)的內(nèi)存中,同時(shí)將所述相應(yīng)類型的數(shù)據(jù)對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⑦M(jìn)行序列化,以存儲(chǔ)至所述虛擬機(jī)的內(nèi)存中。
[0041]通過(guò)以上技術(shù)方案,能夠在進(jìn)行大內(nèi)存緩存的情況下,將KEY值集合與真實(shí)數(shù)據(jù)分離存儲(chǔ),并實(shí)現(xiàn)緩存數(shù)據(jù)版本控制和自動(dòng)更新檔案級(jí)別的監(jiān)聽(tīng)器,以及提高監(jiān)控粒度。
【專利附圖】
【附圖說(shuō)明】[0042]圖IA至圖IC示出了相關(guān)技術(shù)中數(shù)據(jù)緩存的示意圖;
[0043]圖2示出了根據(jù)本發(fā)明的實(shí)施例的數(shù)據(jù)緩存系統(tǒng)的示意框圖;
[0044]圖3示出了根據(jù)本發(fā)明的實(shí)施例的數(shù)據(jù)緩存方法的示意流程圖;
[0045]圖4示出了根據(jù)本發(fā)明的實(shí)施例的緩存數(shù)據(jù)的示意圖;
[0046]圖5示出了根據(jù)本發(fā)明的實(shí)施例的監(jiān)聽(tīng)數(shù)據(jù)的示意圖;
[0047]圖6示出了根據(jù)本發(fā)明的實(shí)施例的緩存數(shù)據(jù)存取和版本控制的示意流程圖;
[0048]圖7示出了根據(jù)本發(fā)明的實(shí)施例的監(jiān)聽(tīng)數(shù)據(jù)的具體示意圖;
[0049]圖8示出了根據(jù)本發(fā)明的實(shí)施例的監(jiān)聽(tīng)器的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0050]為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)的實(shí)施例及實(shí)施例中的特征可以相互組合。
[0051]在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來(lái)實(shí)施,因此,本發(fā)明的保護(hù)范圍并不受下面公開(kāi)的具體實(shí)施例的限制。
[0052]圖2示出了根據(jù)本發(fā)明的實(shí)施例的數(shù)據(jù)緩存系統(tǒng)的示意框圖。
[0053]如圖2所示,根`據(jù)本發(fā)明的實(shí)施例的數(shù)據(jù)緩存系統(tǒng)100包括:緩存劃分單元102,用于查詢待存儲(chǔ)數(shù)據(jù)的類型,為每個(gè)類型的數(shù)據(jù)設(shè)置相應(yīng)的標(biāo)識(shí),并為所述每個(gè)類型的數(shù)據(jù)分別劃分相應(yīng)的緩存區(qū)域;存儲(chǔ)單元104,用于將每個(gè)緩存區(qū)域中的數(shù)據(jù)存儲(chǔ)存至操作系統(tǒng)的內(nèi)存中,并將所述每個(gè)緩存區(qū)域中的數(shù)據(jù)分別對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⒋鎯?chǔ)至虛擬機(jī)的內(nèi)存中。
[0054]在該技術(shù)方案中,由于數(shù)據(jù)對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔?shù)據(jù)量較小,在寫入到虛擬機(jī)內(nèi)存時(shí),序列化的數(shù)據(jù)量也較小,而且先將不同類型的數(shù)據(jù)劃分在不同的緩存區(qū)域中,再將其寫入操作系統(tǒng)的內(nèi)存,也可以降低序列化的數(shù)據(jù)量,降低序列化的消耗,以減輕系統(tǒng)的壓力。
[0055]在上述技術(shù)方案中,優(yōu)選地,還包括:監(jiān)聽(tīng)單元106,設(shè)置于所述每個(gè)類型的數(shù)據(jù)分別對(duì)應(yīng)的緩存區(qū)域中,用于分別監(jiān)聽(tīng)所述每個(gè)類型的數(shù)據(jù)的版本信息;緩存刷新單元108,用于在所述監(jiān)聽(tīng)單元監(jiān)聽(tīng)到所述版本信息發(fā)生變化時(shí),根據(jù)變化的版本信息刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
[0056]在上述技術(shù)方案中,優(yōu)選地,所述監(jiān)聽(tīng)單元106用于實(shí)時(shí)監(jiān)聽(tīng)相應(yīng)類型的數(shù)據(jù)的檔案數(shù)據(jù),并根據(jù)所述檔案數(shù)據(jù)的變化獲取更新的版本;所述緩存刷新單元108根據(jù)所述更新的版本刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
[0057]在上述技術(shù)方案中,優(yōu)選地,所述監(jiān)聽(tīng)單元106還用于記錄相應(yīng)類型數(shù)據(jù)的檔案數(shù)據(jù)、所占緩存區(qū)域的大小、被訪問(wèn)的次數(shù)、和/或被命中的次數(shù)。
[0058]在上述技術(shù)方案中,優(yōu)選地,所述監(jiān)聽(tīng)單元106還用于根據(jù)相應(yīng)的標(biāo)識(shí)判斷相應(yīng)類型的數(shù)據(jù)是否已緩存至相應(yīng)的緩存區(qū)域,若沒(méi)有緩存,則根據(jù)所述相應(yīng)的標(biāo)識(shí)獲取所述相應(yīng)類型的數(shù)據(jù),根據(jù)所述相應(yīng)的標(biāo)識(shí)將所述相應(yīng)類型的數(shù)據(jù)寫入相應(yīng)的緩存區(qū)域,并將所述相應(yīng)類型的數(shù)據(jù)進(jìn)行序列化,以存儲(chǔ)至所述操作系統(tǒng)的內(nèi)存中,同時(shí)將所述相應(yīng)類型的數(shù)據(jù)對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⑦M(jìn)行序列化,以存儲(chǔ)至所述虛擬機(jī)的內(nèi)存中。
[0059]圖3示出了根據(jù)本發(fā)明的實(shí)施例的數(shù)據(jù)緩存方法的示意流程圖。
[0060]如圖3所示,根據(jù)本發(fā)明的實(shí)施例的數(shù)據(jù)緩存方法包括:步驟202,查詢待存儲(chǔ)數(shù)據(jù)的類型,為每個(gè)類型的數(shù)據(jù)設(shè)置相應(yīng)的標(biāo)識(shí),并為所述每個(gè)類型的數(shù)據(jù)分別劃分相應(yīng)的緩存區(qū)域;步驟204,將每個(gè)緩存區(qū)域中的數(shù)據(jù)存儲(chǔ)存至操作系統(tǒng)的內(nèi)存中,并將所述每個(gè)緩存區(qū)域中的數(shù)據(jù)分別對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⒋鎯?chǔ)至虛擬機(jī)的內(nèi)存中。
[0061]在該技術(shù)方案中,由于數(shù)據(jù)對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔?shù)據(jù)量較小,在寫入到虛擬機(jī)內(nèi)存時(shí),序列化的數(shù)據(jù)量也較小,而且先將不同類型的數(shù)據(jù)劃分在不同的緩存區(qū)域中,再將其寫入操作系統(tǒng)的內(nèi)存,也可以降低序列化的數(shù)據(jù)量,降低序列化的消耗,以減輕系統(tǒng)的壓力。
[0062]在上述技術(shù)方案中,優(yōu)選地,還包括:步驟206,根據(jù)所述每個(gè)類型的數(shù)據(jù)分別對(duì)應(yīng)的緩存區(qū)域中的監(jiān)聽(tīng)器,分別監(jiān)聽(tīng)所述每個(gè)類型的數(shù)據(jù)的版本信息,并在所述版本信息發(fā)生變化時(shí),根據(jù)變化的版本信息刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
[0063]在上述技術(shù)方案中,優(yōu)選地,所述步驟206包括:通過(guò)所述監(jiān)聽(tīng)器實(shí)時(shí)監(jiān)聽(tīng)相應(yīng)類型的數(shù)據(jù)的檔案數(shù)據(jù),并根據(jù)所述檔案數(shù)據(jù)的變化獲取更新的版本,根據(jù)所述更新的版本刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
[0064]在上述技術(shù)方案中,優(yōu)選地,還包括:通過(guò)所述監(jiān)聽(tīng)器記錄相應(yīng)類型數(shù)據(jù)的檔案數(shù)據(jù)、所占緩存區(qū)域的大小、被訪問(wèn)的次數(shù)、被命中的次數(shù)。
[0065]在上述技術(shù)方案中,優(yōu)選地,還包括:所述監(jiān)聽(tīng)器根據(jù)相應(yīng)的標(biāo)識(shí)判斷相應(yīng)類型的數(shù)據(jù)是否已緩存至相應(yīng)的緩存區(qū)域,若沒(méi)有緩存,則根據(jù)所述相應(yīng)的標(biāo)識(shí)獲取所述相應(yīng)類型的數(shù)據(jù),根據(jù)所述相應(yīng)的標(biāo)識(shí)將所述相應(yīng)類型的數(shù)據(jù)寫入相應(yīng)的緩存區(qū)域,并將所述相應(yīng)類型的數(shù)據(jù)進(jìn)行序列化,以存儲(chǔ)至所述操作系統(tǒng)的內(nèi)存中,同時(shí)將所述相應(yīng)類型的數(shù)據(jù)對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⑦M(jìn)行序列化,以存儲(chǔ)至所述虛擬機(jī)的內(nèi)存中。
[0066]圖4示出了根據(jù)本發(fā)明的實(shí)施例的緩存數(shù)據(jù)的示意圖。
[0067]如圖4A所示,為清晰的存儲(chǔ)基礎(chǔ)檔案類數(shù)據(jù),就需要進(jìn)行緩存區(qū)域的碎片化,為每一類檔案數(shù)據(jù)分配一個(gè)區(qū)域,分別設(shè)置緩存區(qū)域的信息。Key值對(duì)應(yīng)的數(shù)據(jù)量要小,每次序列化的數(shù)據(jù)量降到最低。
[0068]針對(duì)此情況,本解決方案采用多檔案多緩存配置的方式,將每類檔案的基本信息記錄下來(lái),存儲(chǔ)在JVM內(nèi)存中長(zhǎng)駐;將所有的緩存真實(shí)數(shù)據(jù)存放在大內(nèi)存中,KEY值與真實(shí)緩存數(shù)據(jù)分離,將離散的片段化的真實(shí)數(shù)據(jù)放置到操作系統(tǒng)大內(nèi)存中。有效的解決了序列化的問(wèn)題。
[0069]JVM內(nèi)存中只存儲(chǔ)各類檔案數(shù)據(jù)的基本信息、緩存的key值信息、統(tǒng)計(jì)信息等,真實(shí)的數(shù)據(jù)存儲(chǔ)于操作系統(tǒng)內(nèi)存中。在JVM中將各類型的檔案分類存儲(chǔ),加以區(qū)分方便將來(lái)的統(tǒng)計(jì)和刷新。
[0070]在操作系統(tǒng)內(nèi)存中為所有檔案分配統(tǒng)一的大內(nèi)存緩存區(qū)BigMemCache,統(tǒng)一管理數(shù)據(jù),如此,真實(shí)數(shù)據(jù)的每一項(xiàng)都會(huì)占用比較小的空間。避免了大數(shù)據(jù)序列化與反序列化的問(wèn)題。
[0071]圖5示出了根據(jù)本發(fā)明的實(shí)施例的監(jiān)聽(tīng)數(shù)據(jù)的示意圖。
[0072]如圖5所示,考慮到真實(shí)大緩存區(qū)域總數(shù)必須控制的問(wèn)題和分類監(jiān)控的需要,本方案采取對(duì)各類型緩存KEY值和真實(shí)數(shù)據(jù)分離存儲(chǔ)的方式,存儲(chǔ)結(jié)構(gòu)如上圖。
[0073]對(duì)于版本和數(shù)據(jù)更新方面,根據(jù)監(jiān)控?cái)?shù)據(jù)的變化來(lái)自動(dòng)更新緩存的數(shù)據(jù)是較好的解決方法。
[0074]本存儲(chǔ)機(jī)制為每類型的檔案數(shù)據(jù)創(chuàng)建ー個(gè)版本敏感的VersionSensitiveHashMap,其主要功能就包括存儲(chǔ)key值、綁定檔案基礎(chǔ)信息與表名,綁定監(jiān)聽(tīng)器。
[0075]本方案針對(duì)每ー類檔案數(shù)據(jù)添加一個(gè)監(jiān)聽(tīng)器(Listener),對(duì)數(shù)據(jù)的版本進(jìn)行監(jiān)控。
[0076]監(jiān)聽(tīng)器中記錄檔案對(duì)應(yīng)的數(shù)據(jù)表名和版本(比如時(shí)間戳),當(dāng)檔案數(shù)據(jù)變化時(shí),會(huì)更新數(shù)據(jù)表的版本,監(jiān)聽(tīng)器在得知版本變化后,更新緩存數(shù)據(jù)。實(shí)現(xiàn)緩存數(shù)據(jù)存取和版本控制的流程圖如圖6所示。
[0077]圖7示出了根據(jù)本發(fā)明的實(shí)施例的監(jiān)聽(tīng)數(shù)據(jù)的具體示意圖。
[0078]如圖7所示,針對(duì)數(shù)據(jù)內(nèi)容,本方案采用碎片化緩存區(qū)域的方式,每種檔案分配一個(gè)緩存區(qū)域,添加一個(gè)監(jiān)聽(tīng)器,監(jiān)聽(tīng)器負(fù)責(zé)對(duì)本檔案數(shù)據(jù)的使用情況進(jìn)行監(jiān)控并根據(jù)檔案的數(shù)據(jù)表名來(lái)控制版本。大內(nèi)存區(qū)負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)、緩存策略、大小控制等。
[0079]圖8示出了根據(jù)本發(fā)明的實(shí)施例的監(jiān)聽(tīng)器的結(jié)構(gòu)示意圖。
[0080]檔案大內(nèi)存緩存技術(shù)的主要框架,主要由兩部分組成:檔案的緩存KEY值集合和監(jiān)聽(tīng)器集合。
[0081]緩存區(qū)域的碎片化將原本分配的ー個(gè)緩存存儲(chǔ)區(qū),根據(jù)檔案的種類分配成多個(gè)區(qū)域(VersionSensitiveMap),并為姆個(gè)區(qū)域添加一個(gè)監(jiān)聽(tīng)器。
[0082]每個(gè)監(jiān)聽(tīng)器中記錄了檔案的名稱、對(duì)應(yīng)的數(shù)據(jù)表名、檔案數(shù)據(jù)的最新版本、以及訪問(wèn)次數(shù)、命中次數(shù)等統(tǒng)計(jì)信息。
[0083]此處體現(xiàn)了緩存key與數(shù)據(jù)的分離存儲(chǔ),每個(gè)緩存數(shù)據(jù)對(duì)應(yīng)的key在VersionSensitiveMap中都有記錄。姆次訪問(wèn)緩存數(shù)據(jù)時(shí),首先根據(jù)key值信息進(jìn)行判斷是否存在緩存,并根據(jù)訪問(wèn)進(jìn)行信息的統(tǒng)計(jì)。
[0084]在訪問(wèn)的同時(shí),查詢監(jiān)聽(tīng)器中表名對(duì)應(yīng)的最新版本,實(shí)現(xiàn)版本的控制。解決了上述問(wèn)題中的版本控制和自動(dòng)刷新的問(wèn)題,同時(shí)對(duì)各類檔案進(jìn)行了監(jiān)控。
[0085]大內(nèi)存緩存存儲(chǔ)區(qū)域BigMemCache。利用操作系統(tǒng)內(nèi)存存儲(chǔ)緩存數(shù)據(jù)在其他緩存技術(shù)中也有實(shí)現(xiàn),如EhCache等,但是針對(duì)本場(chǎng)景,對(duì)版本控制不夠完善。本方案采用NC63的緩存技術(shù),和版本上的VersionSensitiveMap集成,解決了大數(shù)據(jù)存儲(chǔ)與版本更新上的統(tǒng)一。
[0086]大數(shù)據(jù)是存儲(chǔ)在操作系統(tǒng)內(nèi)存上,不占用JVM內(nèi)存,且不受JVM內(nèi)存GC的影響,充分利用了 64為操作系統(tǒng)對(duì)大內(nèi)存容量的支持。
[0087]在以上兩塊主要技術(shù)點(diǎn)之上,本存儲(chǔ)機(jī)制對(duì)入口進(jìn)行封裝,對(duì)監(jiān)聽(tīng)器和版本敏感的Map進(jìn)行綁定,將大內(nèi)存緩存技術(shù)與本方案合理的集成在一起,形成完整的檔案類數(shù)據(jù)大內(nèi)存緩存的實(shí)現(xiàn)機(jī)制。
[0088]本方案在緩存監(jiān)控粒度方面,細(xì)化到業(yè)務(wù)的檔案類型層面,更加清晰明了,易于管理。采用本方案進(jìn)行檔案數(shù)據(jù)的緩存,突破了內(nèi)存容量的限制,降低了服務(wù)器的壓力,減少了對(duì)數(shù)據(jù)庫(kù)的鏈接次數(shù),提升了數(shù)據(jù)的訪問(wèn)效率。[0089]另外,本方案在與NC63提供的大內(nèi)存緩存技術(shù)結(jié)合的基礎(chǔ)上,實(shí)現(xiàn)了檔案層級(jí)的數(shù)據(jù)監(jiān)控和緩存數(shù)據(jù)版本的自動(dòng)更新。
[0090]以上結(jié)合附圖詳細(xì)說(shuō)明了本發(fā)明的技術(shù)方案,考慮到相關(guān)技術(shù)中,進(jìn)行大內(nèi)存緩存時(shí),緩存區(qū)域的劃分與數(shù)據(jù)序列化與反序列化問(wèn)題,以及緩存數(shù)據(jù)版本的控制和更新等為題。通過(guò)本申請(qǐng)的技術(shù)方案,能夠在進(jìn)行大內(nèi)存緩存的情況下,將KEY值集合與真實(shí)數(shù)據(jù)分離存儲(chǔ),并實(shí)現(xiàn)緩存數(shù)據(jù)版本控制和自動(dòng)更新檔案級(jí)別的監(jiān)聽(tīng)器,以及提高監(jiān)控粒度。
[0091]以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)緩存系統(tǒng),其特征在于,包括: 緩存劃分單元,用于查詢待存儲(chǔ)數(shù)據(jù)的類型,為每個(gè)類型的數(shù)據(jù)設(shè)置相應(yīng)的標(biāo)識(shí),并為所述每個(gè)類型的數(shù)據(jù)分別劃分相應(yīng)的緩存區(qū)域; 存儲(chǔ)單元,用于將每個(gè)緩存區(qū)域中的數(shù)據(jù)存儲(chǔ)存至操作系統(tǒng)的內(nèi)存中,并將所述每個(gè)緩存區(qū)域中的數(shù)據(jù)分別對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⒋鎯?chǔ)至虛擬機(jī)的內(nèi)存中。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,還包括: 監(jiān)聽(tīng)單元,設(shè)置于所述每個(gè)類型的數(shù)據(jù)分別對(duì)應(yīng)的緩存區(qū)域中,用于分別監(jiān)聽(tīng)所述每個(gè)類型的數(shù)據(jù)的版本信息; 緩存刷新單元,用于在所述監(jiān)聽(tīng)單元監(jiān)聽(tīng)到所述版本信息發(fā)生變化時(shí),根據(jù)變化的版本信息刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述監(jiān)聽(tīng)單元用于實(shí)時(shí)監(jiān)聽(tīng)相應(yīng)類型的數(shù)據(jù)的檔案數(shù)據(jù),并根據(jù)所述檔案數(shù)據(jù)的變化獲取更新的版本;所述緩存刷新單元根據(jù)所述更新的版本刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
4.根據(jù)權(quán)利要求2所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述監(jiān)聽(tīng)單元還用于記錄相應(yīng)類型數(shù)據(jù)的檔案數(shù)據(jù)、所占緩存區(qū)域的大小、被訪問(wèn)的次數(shù)、和/或被命中的次數(shù)。
5.根據(jù)權(quán)利要求2至4中任一項(xiàng)所述的數(shù)據(jù)緩存系統(tǒng),其特征在于,所述監(jiān)聽(tīng)單元還用于根據(jù)相應(yīng)的標(biāo)識(shí)判斷相應(yīng)類型的數(shù)據(jù)是否已緩存至相應(yīng)的緩存區(qū)域,若沒(méi)有緩存,則根據(jù)所述相應(yīng)的標(biāo)識(shí)獲取所述相應(yīng)類型的數(shù)據(jù),根據(jù)所述相應(yīng)的標(biāo)識(shí)將所述相應(yīng)類型的數(shù)據(jù)寫入相應(yīng)的緩存區(qū)域,并將所述相應(yīng)類型的數(shù)據(jù)進(jìn)行序列化,以存儲(chǔ)至所述操作系統(tǒng)的內(nèi)存中,同時(shí)將所述相應(yīng)類型的數(shù)據(jù)對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⑦M(jìn)行序列化,以存儲(chǔ)至所述虛擬機(jī)的內(nèi)存中。
6.一種數(shù)據(jù)緩存方法,其特征在于,包括: 步驟202,查詢待存儲(chǔ)數(shù)據(jù)的類型,為每個(gè)類型的數(shù)據(jù)設(shè)置相應(yīng)的標(biāo)識(shí),并為所述每個(gè)類型的數(shù)據(jù)分別劃分相應(yīng)的緩存區(qū)域; 步驟204,將每個(gè)緩存區(qū)域中的數(shù)據(jù)存儲(chǔ)存至操作系統(tǒng)的內(nèi)存中,并將所述每個(gè)緩存區(qū)域中的數(shù)據(jù)分別對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⒋鎯?chǔ)至虛擬機(jī)的內(nèi)存中。
7.根據(jù)權(quán)利要求6所述的數(shù)據(jù)緩存方法,其特征在于,還包括: 步驟206,根據(jù)所述每個(gè)類型的數(shù)據(jù)分別對(duì)應(yīng)的緩存區(qū)域中的監(jiān)聽(tīng)器,分別監(jiān)聽(tīng)所述每個(gè)類型的數(shù)據(jù)的版本信息,并在所述版本信息發(fā)生變化時(shí),根據(jù)變化的版本信息刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
8.根據(jù)權(quán)利要求7所述的數(shù)據(jù)緩存方法,其特征在于,所述步驟206包括:通過(guò)所述監(jiān)聽(tīng)器實(shí)時(shí)監(jiān)聽(tīng)相應(yīng)類型的數(shù)據(jù)的檔案數(shù)據(jù),并根據(jù)所述檔案數(shù)據(jù)的變化獲取更新的版本,根據(jù)所述更新的版本刷新相應(yīng)類型的數(shù)據(jù)所在的緩存區(qū)域。
9.根據(jù)權(quán)利要求7所述的數(shù)據(jù)緩存方法,其特征在于,還包括:通過(guò)所述監(jiān)聽(tīng)器記錄相應(yīng)類型數(shù)據(jù)的檔案數(shù)據(jù)、所占緩存區(qū)域的大小、被訪問(wèn)的次數(shù)、被命中的次數(shù)。
10.根據(jù)權(quán)利要求7至9中任一項(xiàng)所述的數(shù)據(jù)緩存方法,其特征在于,還包括:所述監(jiān)聽(tīng)器根據(jù)相應(yīng)的標(biāo)識(shí)判斷相應(yīng)類型的數(shù)據(jù)是否已緩存至相應(yīng)的緩存區(qū)域,若沒(méi)有緩存,則根據(jù)所述相應(yīng)的標(biāo)識(shí)獲取所述相應(yīng)類型的數(shù)據(jù),根據(jù)所述相應(yīng)的標(biāo)識(shí)將所述相應(yīng)類型的數(shù)據(jù)寫入相應(yīng)的緩存區(qū)域,并將所述相應(yīng)類型的數(shù)據(jù)進(jìn)行序列化,以存儲(chǔ)至所述操作系統(tǒng)的內(nèi)存中,同時(shí)將所述相應(yīng)類型的數(shù)據(jù)對(duì)應(yīng)的元數(shù)據(jù)、標(biāo)識(shí)和/或?qū)傩孕畔⑦M(jìn)行序列化,以存 儲(chǔ)至所述虛擬機(jī)的內(nèi)存中。
【文檔編號(hào)】G06F17/30GK103488581SQ201310397394
【公開(kāi)日】2014年1月1日 申請(qǐng)日期:2013年9月4日 優(yōu)先權(quán)日:2013年9月4日
【發(fā)明者】劉建民 申請(qǐng)人:用友軟件股份有限公司