數(shù)據(jù)緩存方法與裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種計(jì)算機(jī)技術(shù)及互聯(lián)網(wǎng)領(lǐng)域,特別涉及一種數(shù)據(jù)緩存方法與裝置。
【背景技術(shù)】
[0002]相關(guān)技術(shù)中,為了提高網(wǎng)站訪問速度,一些大型的、需要頻繁訪問數(shù)據(jù)庫的網(wǎng)站通常采用分布式的高速緩存系統(tǒng)。
[0003]相關(guān)技術(shù)中,分布式的高速緩存系統(tǒng)的工作流程為:先檢查客戶端的請求數(shù)據(jù)是否在內(nèi)存緩存中,如有,直接把請求數(shù)據(jù)返回,不再對數(shù)據(jù)庫進(jìn)行任何操作;如果請求的數(shù)據(jù)不在內(nèi)存緩存中,則到數(shù)據(jù)庫中查找請求的數(shù)據(jù),在數(shù)據(jù)庫中查找到請求的數(shù)據(jù)后,從數(shù)據(jù)庫中獲取該數(shù)據(jù),并將從數(shù)據(jù)庫中獲取的數(shù)據(jù)返回給客戶端,同時(shí)將數(shù)據(jù)緩存一份到內(nèi)存中;每次更新數(shù)據(jù)庫的同時(shí)更新內(nèi)存緩存中的數(shù)據(jù),保證一致性。
[0004]當(dāng)分配給數(shù)據(jù)庫緩存的內(nèi)存空間用完之后,則使用LRU(LeastRecently Used,最近最少使用)策略加上到期失效策略,失效數(shù)據(jù)首先被替換,然后再替換掉最近未使用的數(shù)據(jù)。例如,假設(shè)數(shù)據(jù)庫中一共有6條數(shù)據(jù),序號(hào)分別為1、2、3、4、5和6,假設(shè)內(nèi)存里只能緩存三條數(shù)據(jù),根據(jù)LRU機(jī)制,在從數(shù)據(jù)庫中獲取到一條數(shù)據(jù)時(shí),將使用該條數(shù)據(jù)替換內(nèi)存中原來緩存的一條數(shù)據(jù),比如,最近收到了三個(gè)查找請求,分別請求第1、2和3條數(shù)據(jù),將第1、2和3條數(shù)據(jù)緩存到內(nèi)存中,假設(shè)又接收到一個(gè)數(shù)據(jù)獲取請求,請求查找第6條數(shù)據(jù),從內(nèi)存中沒有查找到第6條數(shù)據(jù),則從數(shù)據(jù)庫中查找,從數(shù)據(jù)庫中獲取到第6條數(shù)據(jù)時(shí),將第6條數(shù)據(jù)返回給客戶端,并將第6條數(shù)據(jù)緩存到內(nèi)存中,由于數(shù)據(jù)庫的內(nèi)存空間已滿,則使用第6條將數(shù)據(jù)庫內(nèi)存中最近最少使用的那條數(shù)據(jù),即第1條數(shù)據(jù),替換掉,則數(shù)據(jù)庫內(nèi)存中緩存的數(shù)據(jù)的序號(hào)為:6,3,2。
[0005]采用這種機(jī)制,熱數(shù)據(jù)也可能被替換掉,例如,在上述例子中,假設(shè)第1、2和3是三條數(shù)據(jù)非常非常的熱的數(shù)據(jù)(即在最近時(shí)間內(nèi)訪問次數(shù)很多的數(shù)據(jù)),而第6條數(shù)據(jù)為冷數(shù)據(jù),例如,大約一天能查一次。則采用上述機(jī)制,在接收到查找第6條數(shù)據(jù)的查找請求時(shí),將熱數(shù)據(jù)即第1條數(shù)據(jù)從數(shù)據(jù)庫內(nèi)存踢出去了,再接收到其他的查找第1條數(shù)據(jù)的情況時(shí),需要從數(shù)據(jù)庫中查找,而且,由于第1條數(shù)據(jù)是熱數(shù)據(jù),同時(shí)接收到的查找請求的數(shù)量很大,都需要去數(shù)據(jù)庫中查找,特別是在數(shù)據(jù)庫內(nèi)存中緩存的多條熱數(shù)據(jù)都被冷數(shù)據(jù)踢到數(shù)據(jù)內(nèi)中,將會(huì)導(dǎo)致數(shù)據(jù)庫的壓力過大,導(dǎo)致?lián)砣?br>
【發(fā)明內(nèi)容】
[0006]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的數(shù)據(jù)存儲(chǔ)方案。
[0007]本發(fā)明一個(gè)進(jìn)一步的目的是提供一種可以分級(jí)緩存數(shù)據(jù)的方案。
[0008]本發(fā)明另一進(jìn)一步的目的是可以快速的定位到請求獲取的數(shù)據(jù)。
[0009]根據(jù)本發(fā)明的一個(gè)方面,本發(fā)明提供了一種數(shù)據(jù)緩存方法,包括:接收數(shù)據(jù)獲取請求,判斷數(shù)據(jù)庫內(nèi)存中是否有緩存數(shù)據(jù)獲取請求所請求的數(shù)據(jù);在確定數(shù)據(jù)庫內(nèi)存中沒有緩存數(shù)據(jù)獲取請求所請求的數(shù)據(jù)的情況下,從數(shù)據(jù)庫中查找數(shù)據(jù)獲取請求所請求的數(shù)據(jù),將查找到的數(shù)據(jù)返回給客戶端;獲取查找到的數(shù)據(jù)在上一周期的訪問量;判斷查找到的數(shù)據(jù)在上一周期的訪問量是否達(dá)到第一閾值,在查找到的數(shù)據(jù)在上一周期的訪問量的訪問量達(dá)到第一閾值的情況下,將數(shù)據(jù)緩存至數(shù)據(jù)庫內(nèi)存。
[0010]可選地,判斷查找到的數(shù)據(jù)在上一周期內(nèi)的訪問量是否達(dá)到第一閾值,包括:計(jì)算查找到的數(shù)據(jù)在上一周期的訪問量與數(shù)據(jù)庫中所有數(shù)據(jù)在上一周期的訪問總量的百分比;判斷百分比是否達(dá)到第一閾值。
[0011]可選地,數(shù)據(jù)庫內(nèi)存包括:第一緩存區(qū)和第二緩存區(qū);將數(shù)據(jù)緩存至數(shù)據(jù)庫內(nèi)存包括:判斷查找到的數(shù)據(jù)在上一周期的訪問量是否達(dá)到第二閾值,其中,第二閾值大于第一閾值;在判斷查找到的數(shù)據(jù)在上一周期的訪問量達(dá)到第二閾值的情況下,將查找到的數(shù)據(jù)緩存至第一緩存區(qū);在判斷查找到的數(shù)據(jù)在上一周期的訪問量沒有達(dá)到第二閾值的情況下,將查找到的數(shù)據(jù)緩存至第二緩存區(qū)。
[0012]可選地,判斷查找到的數(shù)據(jù)在上一周期的訪問量是否達(dá)到第二閾值,包括:獲取查找到的數(shù)據(jù)在上一周期的訪問量與數(shù)據(jù)庫中所有數(shù)據(jù)在上一周期的訪問總量的百分比;判斷百分比是否達(dá)到第二閾值。
[0013]可選地,該方法還包括:在當(dāng)前周期到達(dá)時(shí),根據(jù)數(shù)據(jù)庫中各個(gè)數(shù)據(jù)在當(dāng)前周期的訪問量與第一閾值和第二閾值的大小關(guān)系,更新第一緩存區(qū)和第二緩存區(qū)內(nèi)緩存的數(shù)據(jù),其中,第一緩存區(qū)中緩存的數(shù)據(jù)的訪問量達(dá)到第二閾值,第二緩存區(qū)中緩存的數(shù)據(jù)的訪問量達(dá)到第一閾值且未達(dá)到第二閾值。
[0014]可選地,判斷數(shù)據(jù)庫內(nèi)存中是否緩存有數(shù)據(jù)獲取請求所請求的數(shù)據(jù),包括:判斷數(shù)據(jù)獲取請求所請求的數(shù)據(jù)在上一周期的訪問量是否達(dá)到第一閾值,在數(shù)據(jù)獲取請求所請求的數(shù)據(jù)在上一周期的訪問量沒有達(dá)到第一閾值,確定數(shù)據(jù)獲取請求所請求的數(shù)據(jù)沒有緩存在數(shù)據(jù)庫內(nèi)存中。
[0015]可選地,在數(shù)據(jù)獲取請求所請求的數(shù)據(jù)在上一周期的訪問量達(dá)到第一閾值的情況下,該方法還包括:判斷數(shù)據(jù)獲取請求所請求的數(shù)據(jù)在上一周期的訪問量是否達(dá)到第二閾值,如果是,則從第一緩存區(qū)查找數(shù)據(jù)獲取請求所請求的數(shù)據(jù),在從第一緩存區(qū)查找到數(shù)據(jù)獲取請求所請求的數(shù)據(jù),則將查找到的數(shù)據(jù)返回給客戶端,如果沒有從第一緩存區(qū)查找到數(shù)據(jù)獲取請求所請求的數(shù)據(jù),則繼續(xù)在第二緩存區(qū)查找數(shù)據(jù)獲取請求所請求的數(shù)據(jù),若從所述第二緩存區(qū)查找到所述數(shù)據(jù)獲取請求所請求的數(shù)據(jù),則將查找到的數(shù)據(jù)返回給客戶端,如果沒有從第二緩存區(qū)查找到數(shù)據(jù)獲取請求所請求的數(shù)據(jù),則確定數(shù)據(jù)獲取請求所請求的數(shù)據(jù)沒有緩存在數(shù)據(jù)庫內(nèi)存中;如果數(shù)據(jù)獲取請求所請求的數(shù)據(jù)在上一周期的訪問量沒有達(dá)到第二閾值,則在第二緩存區(qū)查找數(shù)據(jù)獲取請求所請求的數(shù)據(jù),若從所述第二緩存區(qū)查找到所述數(shù)據(jù)獲取請求所請求的數(shù)據(jù),則將查找到的數(shù)據(jù)返回給客戶端,如果沒有從第二緩存區(qū)查找到數(shù)據(jù)獲取請求所請求的數(shù)據(jù),則確定數(shù)據(jù)獲取請求所請求的數(shù)據(jù)沒有緩存在數(shù)據(jù)庫內(nèi)存中。
[0016]根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種數(shù)據(jù)緩存裝置,包括:接收模塊,用于接收數(shù)據(jù)獲取請求;第一判斷模塊,用于判斷數(shù)據(jù)庫內(nèi)存中是否有緩存數(shù)據(jù)獲取請求所請求的數(shù)據(jù);查找模塊,用于在第一判斷模塊判斷數(shù)據(jù)庫內(nèi)存中沒有緩存數(shù)據(jù)獲取請求所請求的數(shù)據(jù)的情況下,從數(shù)據(jù)庫中查找數(shù)據(jù)獲取請求所請求的數(shù)據(jù);發(fā)送模塊,用于將查找模塊查找到的數(shù)據(jù)返回給客戶端;獲取模塊,用于獲取查找到的數(shù)據(jù)在上一周期的訪問量;第二判斷模塊,用于判斷查找到的數(shù)據(jù)在上一周期的訪問量是否達(dá)到第一閾值;緩存模塊,用于在第二判斷模塊判斷查找到的數(shù)據(jù)在上一周期的訪問量的訪問量達(dá)到第一閾值的情況下,將數(shù)據(jù)緩存至數(shù)據(jù)庫內(nèi)存。
[0017]可選地,第二判斷模塊包括:第一計(jì)算單元,用于計(jì)算查找到的數(shù)據(jù)在上一周期的訪問量與數(shù)據(jù)庫中所有數(shù)據(jù)在上一周期的訪問總量的百分比;第一判斷單元,用于判斷第一計(jì)算單元得到的百分比是否達(dá)到第一閾值。
[0018]可選地,數(shù)據(jù)庫內(nèi)存包括:第一緩存區(qū)和第二緩存區(qū);緩存模塊包括:第二判斷單元,用于判斷查找到的數(shù)據(jù)在上一周期的訪問量是否達(dá)到第二閾值,其中,第二閾值大于第一閾值;緩存單元,用于在判斷查找到的數(shù)據(jù)在上一周期的訪問量達(dá)到第二閾值的情況下,將查找到的數(shù)據(jù)緩存至第一緩存區(qū),在判斷查找到的數(shù)據(jù)在上一周期的訪問量沒有達(dá)到第二閾值的情況下,將查找到的數(shù)據(jù)緩存至第二緩存區(qū)。
[0019]可選地,第二判斷單元通過以下方式判斷查找到的數(shù)據(jù)在上一周期的訪問量是否達(dá)到第二閾值:獲取查找到的數(shù)據(jù)在上一周期的訪問量與數(shù)據(jù)庫中所有數(shù)據(jù)在上一周期的訪問總量的百分比;判斷百分比是否達(dá)到第二閾值。
[0020]可選地,該裝置還包括:更新模塊,用于在當(dāng)前周期到達(dá)時(shí),根據(jù)數(shù)據(jù)庫中各個(gè)數(shù)據(jù)在當(dāng)前周期的訪問量與第一閾值和第二閾值的大小關(guān)系,更新第一緩存區(qū)和第二緩存區(qū)內(nèi)緩存的數(shù)據(jù),其中,第一緩存區(qū)中緩存的數(shù)據(jù)的訪問量達(dá)到第二閾值,第二緩存區(qū)中緩存的數(shù)據(jù)的訪問量達(dá)到第一閾值且未達(dá)到第二閾值。
[0021 ]可選地,第一判斷模塊包括:第三判斷單元,用于判斷數(shù)據(jù)獲取請求所請求的數(shù)據(jù)在上一周期的訪問量是否達(dá)到第一閾值;確定單元,用于在數(shù)據(jù)獲取請求所請求的數(shù)據(jù)在上一周期的訪問量沒有達(dá)到第一閾值,確定數(shù)據(jù)獲取請求所請求的數(shù)據(jù)沒有緩存在數(shù)據(jù)庫內(nèi)存中。
[0022]可選地,述第一判斷模塊還包括:第四判斷單元,其中,第四判斷單元,用于在數(shù)據(jù)獲取請求所請求的數(shù)據(jù)在上一周期的訪問量達(dá)到第一閾值的情況下,判斷數(shù)據(jù)獲取請求所請求的數(shù)據(jù)在上一周期的訪問量是否達(dá)到第二閾值,如果是,則觸發(fā)查找模塊從第一緩存區(qū)查找數(shù)據(jù)獲取請求所請求的數(shù)據(jù),如果否,則觸發(fā)查找模塊從第二緩存區(qū)查找數(shù)據(jù)獲取請求所請求的數(shù)據(jù);查找模塊,還用于在第四判斷單元的觸發(fā)下,從第一緩存區(qū)查找數(shù)據(jù)獲取請求所請求的數(shù)據(jù),以及在沒有從第一緩存區(qū)查找到數(shù)據(jù)獲取請求所請求的數(shù)據(jù)的情況下,繼續(xù)在第二緩存區(qū)查找數(shù)據(jù)獲取請求所請求的數(shù)據(jù),若從所述第二緩存區(qū)查找到所述數(shù)據(jù)獲取請求所請求的數(shù)據(jù),則將