專利名稱:基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及緩存數(shù)據(jù)庫技術(shù),尤其涉及一種基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法。
背景技術(shù):
在當(dāng)今的信息社會,數(shù)據(jù)庫技術(shù)及軟件已廣泛應(yīng)用到各企業(yè)單位。例如,銀行系統(tǒng)、稅務(wù)系統(tǒng)、售票系統(tǒng)、財務(wù)系統(tǒng)、人事系統(tǒng)等,在web時代,管理諸如用戶信息、商品信息、社交信息等浩如煙海的技術(shù)資料,緩存數(shù)據(jù)庫技術(shù)是目前唯一可行的方案。然而,當(dāng)包含技術(shù)資料的數(shù)據(jù)庫中的數(shù)據(jù)量以T、P為單位計算時,磁盤10,即應(yīng)用程序訪問物理數(shù)據(jù)源成為數(shù)據(jù)庫訪問效率不可逾越的鴻溝。一方面,需要使用數(shù)據(jù)庫來存儲大數(shù)據(jù)量的技術(shù)資料;另一方面,低效的磁盤IO操作限制了數(shù)據(jù)庫的高效運行。
為了提高數(shù)據(jù)庫的運行效率,現(xiàn)有技術(shù)提出了數(shù)據(jù)緩存技術(shù)。緩存數(shù)據(jù)介于應(yīng)用程序和物理數(shù)據(jù)源之間,其作用是為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問的頻次,由于緩存的介質(zhì)一般是內(nèi)存,因而,其讀寫速度較快,從而提高應(yīng)用的運行性能。使用緩存不可避免地帶來了兩個技術(shù)問題,一是緩存中的數(shù)據(jù)與物理數(shù)據(jù)的一致性;二是緩存數(shù)據(jù)的時效性(有效期)。特別是目前大型數(shù)據(jù)庫普遍采用集群方式存儲數(shù)據(jù),并且采用數(shù)據(jù)庫主庫以及數(shù)據(jù)庫從庫,對數(shù)據(jù)寫操作和數(shù)據(jù)讀操作進行分離,使得緩存數(shù)據(jù)與物理數(shù)據(jù)的交互,與單臺主機上的內(nèi)存與磁盤數(shù)據(jù)交互相比,變得更加復(fù)雜和多樣,數(shù)據(jù)同步性和時效性問題也變得更加突出。目前,基于鍵值(key-value)對的緩存數(shù)據(jù)庫技術(shù)有很多,例如,分布式緩存系統(tǒng)(Memcached)、key-value 存儲系統(tǒng)(Redis, Remote Dictionary Server)等,實現(xiàn)了緩存數(shù)據(jù)的高效訪問,然而,對于緩存數(shù)據(jù)的時效性和一致性,全部依賴于數(shù)據(jù)庫運營者預(yù)先制定的策略。傳統(tǒng)的策略,是在更新數(shù)據(jù)庫主庫的同時,使緩存數(shù)據(jù)庫中緩存的數(shù)據(jù)無效化;接著從數(shù)據(jù)庫從庫讀取數(shù)據(jù),并將讀取的數(shù)據(jù)寫入緩存數(shù)據(jù)庫,例如,在Memcached中更新緩存數(shù)據(jù);在更新緩存數(shù)據(jù)的同時,根據(jù)服務(wù)器(Memcached)負載,固定設(shè)定緩存數(shù)據(jù)有效時間,如24小時等。然而,一旦數(shù)據(jù)庫讀寫訪問頻繁,由于數(shù)據(jù)庫主庫與數(shù)據(jù)庫從庫不能進行實時同步更新,將導(dǎo)致數(shù)據(jù)庫主庫與數(shù)據(jù)庫從庫不一致現(xiàn)象會經(jīng)常發(fā)生,并且不一致的時間由于高度依賴于服務(wù)器負載(設(shè)定的緩存數(shù)據(jù)有效時間)而不可測,使得緩存數(shù)據(jù)與數(shù)據(jù)庫中物理數(shù)據(jù)不一致的現(xiàn)象經(jīng)常發(fā)生;進一步地,在緩存數(shù)據(jù)的有效期內(nèi),或者下一次對數(shù)據(jù)庫主庫中不一致的數(shù)據(jù)進行寫訪問之前,用戶通過緩存機制訪問緩存數(shù)據(jù)庫得到的數(shù)據(jù)與數(shù)據(jù)庫主庫中寫入的數(shù)據(jù)是不一致的,一致性較差;而如果將緩存數(shù)據(jù)失效時間設(shè)定的較短,雖然可以提高數(shù)據(jù)一致性,但由于緩存數(shù)據(jù)庫中數(shù)據(jù)頻繁失效,從而帶來緩存命中率降低,影響緩存的效率。因而,如何在數(shù)據(jù)一致性、時效性和緩存高效率之間取得較好的平衡,是一個亟待解決的問題
發(fā)明內(nèi)容
本發(fā)明的實施例提供一種基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法,提升數(shù)據(jù)的緩存效率,優(yōu)化數(shù)據(jù)緩存的綜合性能。本發(fā)明的實施例還提供一種基于數(shù)據(jù)緩存的讀數(shù)據(jù)裝置,提升數(shù)據(jù)的緩存效率,優(yōu)化數(shù)據(jù)緩存的綜合性能。為達到上述目的,本發(fā)明實施例提供的一種基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法,包括接收用戶用于獲取數(shù)據(jù)輸入的讀訪問請求信息,抽取讀訪問請求信息,生成關(guān)鍵詞;查詢緩存數(shù)據(jù)庫,確定緩存數(shù)據(jù)庫中未緩存生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,初始 化待獲取數(shù)據(jù)的標志值;或者,確定緩存數(shù)據(jù)庫中緩存有生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,但緩存的數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效,設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值;讀數(shù)據(jù)庫從庫,查詢得到生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù);獲取讀數(shù)據(jù)庫從庫的時間戳信息,根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置鍵值對的數(shù)據(jù)鍵值信息,并更新緩存數(shù)據(jù)庫;將查詢得到的數(shù)據(jù)輸出。其中,在所述接收用戶用于獲取數(shù)據(jù)輸入的讀訪問請求信息之前,進一步包括獲取用戶寫入的數(shù)據(jù)信息,抽取用戶寫入的數(shù)據(jù)信息,生成對應(yīng)的關(guān)鍵詞;查詢緩存數(shù)據(jù)庫,查找是否存在生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,如果存在該數(shù)據(jù)鍵值,將緩存數(shù)據(jù)庫中緩存的該數(shù)據(jù)刪除;如果不存在該數(shù)據(jù)鍵值,根據(jù)生成的關(guān)鍵詞以及用戶寫入的數(shù)據(jù)信息,生成關(guān)鍵詞-數(shù)據(jù)鍵值對,并寫入數(shù)據(jù)庫主庫。其中,緩存數(shù)據(jù)庫中,以關(guān)鍵詞-數(shù)據(jù)鍵值存儲數(shù)據(jù),所述數(shù)據(jù)鍵值包含時間戳、標志以及數(shù)據(jù)。其中,所述初始化待獲取數(shù)據(jù)的標志值包括設(shè)定待獲取數(shù)據(jù)的標志值為O。其中,所述緩存的數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效包括解析查詢得到的數(shù)據(jù)鍵值,獲得數(shù)據(jù)鍵值中包含的時間戳信息,判斷解析時的當(dāng)前時間戳與獲得的時間戳,如果當(dāng)前時間戳大于獲得的時間戳,確定該數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效。其中,進一步包括如果當(dāng)前時間戳小于或等于獲得的時間戳,將查詢得到的數(shù)據(jù)鍵值中包含的數(shù)據(jù)作為待獲取數(shù)據(jù)輸出。其中,所述根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置鍵值對的數(shù)據(jù)鍵值信息包括將待獲取數(shù)據(jù)作為數(shù)據(jù)鍵值信息中的數(shù)據(jù);將設(shè)置的待獲取數(shù)據(jù)的標志加1,作為數(shù)據(jù)鍵值信息中的標志;根據(jù)數(shù)據(jù)鍵值信息中的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及預(yù)先設(shè)置的時間戳值計算公式,計算更新的緩存數(shù)據(jù)有效時間,作為數(shù)據(jù)鍵值信息中的時間戳。其中,所述時間戳值計算公式為 time=time2+ α χ ηflag
式中,time為更新的緩存數(shù)據(jù)有效時間;time2為讀數(shù)據(jù)庫從庫的時間戳;α為數(shù)據(jù)基準有效時間;η為基準擴展值;flag'為更新數(shù)據(jù)的標志;
flag' =flag+1 ;flag為待獲取數(shù)據(jù)的標志。其中,所述在將緩存數(shù)據(jù)庫中緩存的該數(shù)據(jù)刪除后,或,寫入數(shù)據(jù)庫主庫后,進一步包括向用戶返回寫入成功信息。其中,進一步包括如果查詢數(shù)據(jù)庫從庫,不存在與生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù),向用戶返回讀數(shù)據(jù)失敗信息。一種基于數(shù)據(jù)緩存的讀數(shù)據(jù)裝置,該裝置包括讀數(shù)據(jù)模塊、緩存數(shù)據(jù)庫模塊以及數(shù)據(jù)庫從庫模塊,其中,讀數(shù)據(jù)模塊,用于接收用戶用于獲取數(shù)據(jù)輸入的讀訪問請求信息,抽取讀訪問請求信息,生成關(guān)鍵詞;緩存數(shù)據(jù)庫模塊,用于根據(jù)讀數(shù)據(jù)模塊生成的關(guān)鍵詞進行查詢,確定緩存數(shù)據(jù)庫中未緩存生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,初始化待獲取數(shù)據(jù)的標志值;或者,確定緩存數(shù)據(jù)庫中緩存有生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,但緩存的數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效,設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值;數(shù)據(jù)庫從庫模塊,用于讀數(shù)據(jù)庫從庫,查詢得到生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)輸出;獲取讀數(shù)據(jù)庫從庫的時間戳信息,根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置鍵值對的數(shù)據(jù)鍵值信息,并更新緩存數(shù)據(jù)庫。所述緩存數(shù)據(jù)庫模塊包括查詢單元、判斷單元、初始化單元以及數(shù)據(jù)鍵值處理單元,其中,查詢單元,用于根據(jù)讀數(shù)據(jù)模塊生成的關(guān)鍵詞進行查詢;判斷單元,判斷查詢單元是否查詢到生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,如果是,將查詢得到的數(shù)據(jù)鍵值輸出至數(shù)據(jù)鍵值處理單元;否則,向初始化單元輸出觸發(fā)信息;初始化單元,用于根據(jù)接收的觸發(fā)信息,初始化待獲取數(shù)據(jù)的標志值,向數(shù)據(jù)庫從庫豐吳塊輸出;數(shù)據(jù)鍵值處理單元,用于解析查詢得到的數(shù)據(jù)鍵值,獲得數(shù)據(jù)鍵值中包含的時間戳信息,判斷解析時的當(dāng)前時間戳與獲得的時間戳,如果當(dāng)前時間戳小于或等于獲得的時間戳,將查詢得到的數(shù)據(jù)鍵值中包含的數(shù)據(jù)作為待獲取數(shù)據(jù)輸出;如果當(dāng)前時間戳大于獲得的時間戳,設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值,向數(shù)據(jù)庫從庫模塊輸出。進一步包括寫數(shù)據(jù)模塊以及數(shù)據(jù)庫主庫模塊,其中,寫數(shù)據(jù)模塊,獲取用戶寫入的數(shù)據(jù)信息,抽取用戶寫入的數(shù)據(jù)信息,生成對應(yīng)的關(guān)鍵詞;緩存數(shù)據(jù)庫模塊,進一步用于根據(jù)寫數(shù)據(jù)模塊生成的關(guān)鍵詞進行查詢,查找是否存在生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,如果存在該數(shù)據(jù)鍵值,將緩存數(shù)據(jù)庫中緩存的該數(shù)據(jù)刪除;如果不存在該數(shù)據(jù)鍵值,根據(jù)生成的關(guān)鍵詞以及用戶寫入的數(shù)據(jù)信息,生成關(guān)鍵詞-數(shù)據(jù)鍵值對,并寫入數(shù)據(jù)庫主庫模塊;數(shù)據(jù)庫主庫模塊,用于接收緩存數(shù)據(jù)庫模塊寫入的關(guān)鍵詞-數(shù)據(jù)鍵值對,進行存儲。所述緩存數(shù)據(jù)庫模塊進一步包括寫數(shù)據(jù)處理單元,用于判斷查詢單元是否根據(jù)寫數(shù)據(jù)模塊生成的關(guān)鍵詞查詢到對應(yīng)的數(shù)據(jù)鍵值,如果是,將緩存該數(shù)據(jù)刪除;如果不存在該數(shù)據(jù)鍵值,根據(jù)生成的關(guān)鍵詞以及用戶寫入的數(shù)據(jù)信息,生成關(guān)鍵詞-數(shù)據(jù)鍵值對,并寫入數(shù)據(jù)庫主庫模塊。·
所述根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置鍵值對的數(shù)據(jù)鍵值信息包括將待獲取數(shù)據(jù)作為數(shù)據(jù)鍵值信息中的數(shù)據(jù);將設(shè)置的待獲取數(shù)據(jù)的標志加1,作為數(shù)據(jù)鍵值信息中的標志;根據(jù)數(shù)據(jù)鍵值信息中的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及預(yù)先設(shè)置的時間戳值計算公式,計算更新的緩存數(shù)據(jù)有效時間,作為數(shù)據(jù)鍵值信息中的時間戳。所述時間戳值計算公式為time=time2+ α χ ηflag式中,time為更新的緩存數(shù)據(jù)有效時間;time2為讀數(shù)據(jù)庫從庫的時間戳;α為數(shù)據(jù)基準有效時間;n為基準擴展值;flag'為更新數(shù)據(jù)的標志;flag, =f lag+1 ;flag為待獲取數(shù)據(jù)的標志。由上述技術(shù)方案可見,本發(fā)明實施例提供的一種基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法及裝置,接收用戶用于獲取數(shù)據(jù)輸入的讀訪問請求信息,抽取讀訪問請求信息,生成關(guān)鍵詞;查詢緩存數(shù)據(jù)庫,確定緩存數(shù)據(jù)庫中未緩存生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,初始化待獲取數(shù)據(jù)的標志值;或者,確定緩存數(shù)據(jù)庫中緩存有生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,但緩存的數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效,設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值;讀數(shù)據(jù)庫從庫,查詢得到生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù);獲取讀數(shù)據(jù)庫從庫的時間戳信息,根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置鍵值對的數(shù)據(jù)鍵值信息,并更新緩存數(shù)據(jù)庫;將查詢得到的數(shù)據(jù)輸出。這樣,通過為緩存數(shù)據(jù)庫中緩存的數(shù)據(jù)設(shè)置時間戳以及標志,在緩存的數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效后,對數(shù)據(jù)鍵值中包含的標志進行更新,并相應(yīng)更新數(shù)據(jù)鍵值中包含的時間戳,避免了頻繁對緩存數(shù)據(jù)庫進行更新,提升數(shù)據(jù)的緩存效率,使數(shù)據(jù)一致性、時效性和緩存高效率之間取得較好的平衡,優(yōu)化了數(shù)據(jù)緩存的綜合性能。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,以下將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹。顯而易見地,以下描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員而言,還可以根據(jù)這些附圖所示實施例得到其它的實施例及其附圖。圖I為本發(fā)明實施例基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法流程示意圖。圖2為本發(fā)明實施例基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法具體流程示意圖。圖3為本發(fā)明實施例基于數(shù)據(jù)緩存的寫數(shù)據(jù)方法具體流程示意圖。圖4為本發(fā)明實施例基于數(shù)據(jù)緩存的讀數(shù)據(jù)裝置結(jié)構(gòu)示意圖。
具體實施方式
以下將結(jié)合附圖對本發(fā)明各實施例的技術(shù)方案進行清楚、完整的描述,顯然,所描述的實施例僅僅是本發(fā)明的一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所得到的所有其它實施例,都屬于本發(fā)明所保護的范圍?,F(xiàn)有基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法,根據(jù)用戶輸入的關(guān)鍵詞,查詢緩存數(shù)據(jù)庫,如果緩存數(shù)據(jù)庫中沒有該關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,則從數(shù)據(jù)庫從庫讀取該關(guān)鍵詞對應(yīng)的數(shù)據(jù),并將讀取的數(shù)據(jù)寫入緩存數(shù)據(jù)庫,例如,在Memcached中更新緩存數(shù)據(jù),在更新緩存數(shù)據(jù)的同時,根據(jù)服務(wù)器(Memcached)負載,固定設(shè)定緩存數(shù)據(jù)有效時間,如24小時,以作為用戶后續(xù)從緩存數(shù)據(jù)庫中讀取該數(shù)據(jù)的有效期。但該固定設(shè)置緩存數(shù)據(jù)有效時間的方式,如果緩存數(shù)據(jù)有效時間值設(shè)置較長,容易導(dǎo)致用戶通過緩存機制訪問得到的數(shù)據(jù)與數(shù)據(jù)庫主庫中寫入的數(shù)據(jù)的一致性較差;而如果將緩存數(shù)據(jù)有效時間值設(shè)定的較短,雖然可以提高用戶通過緩存機制訪問得到的數(shù)據(jù)與數(shù)據(jù)庫主庫中寫入的數(shù)據(jù)的一致性,但由于緩存數(shù)據(jù)庫中數(shù)據(jù)需要頻繁更新,根據(jù)關(guān)鍵詞查詢緩存數(shù)據(jù)庫,從而帶來緩存命中率降低,在查詢失敗后,需要再從數(shù)據(jù)庫從庫中讀取數(shù)據(jù),并將讀取的數(shù)據(jù)寫入緩存數(shù)據(jù)庫中,影響緩存的性能,也降低了讀數(shù)據(jù)的效率。本發(fā)明實施例中,提供了一種緩存數(shù)據(jù)庫中讀數(shù)據(jù)的技術(shù),通過增加一個單時間戳,可有效解決現(xiàn)有緩存技術(shù)中數(shù)據(jù)時效性和一致性的問題。具體來說,在緩存數(shù)據(jù)庫緩存的數(shù)據(jù)中設(shè)置時間戳(time)信息以及標志(flag)信息,通過獲取讀訪問請求信息;抽取讀訪問請求信息,形成關(guān)鍵詞(key);根據(jù)關(guān)鍵詞查詢緩存數(shù)據(jù)庫,如果存在該關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值(value),則根據(jù)鍵值判斷該關(guān)鍵詞對應(yīng)的數(shù)據(jù)是否失效,如果沒有失效,則將該關(guān)鍵詞對應(yīng)的數(shù)據(jù)輸出給用戶;如果該關(guān)鍵詞對應(yīng)的數(shù)據(jù)已經(jīng)失效、或者,緩存數(shù)據(jù)庫中不存在該關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,則從數(shù)據(jù)庫從庫中讀取該關(guān)鍵詞對應(yīng)的數(shù)據(jù),并設(shè)置該關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,即生成key-value對,根據(jù)設(shè)置的數(shù)據(jù)鍵值對更新緩存數(shù)據(jù)庫。這樣,可以充分考慮數(shù)據(jù)時效性和緩存訪問的高效性,在數(shù)據(jù)一致性、時效性和訪問高效性之間取得了較好的平衡。以下以Memcached作為緩存數(shù)據(jù)庫,來說明本發(fā)明的讀寫過程。Memcached是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負載。通過在內(nèi)存中緩存數(shù)據(jù)和對象來減少讀取數(shù)據(jù)庫的次數(shù),從而提供動態(tài)、數(shù)據(jù)庫驅(qū)動網(wǎng)站的速度。所應(yīng)說明的是,本發(fā)明實施例不僅僅只應(yīng)用于以Memcached作為緩存數(shù)據(jù)庫,還可以應(yīng)用于采用其它緩存技術(shù)作為緩存數(shù)據(jù)庫的情形,例如,Redis等。圖I為本發(fā)明實施例基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法流程示意圖。參見圖1,該流程包括步驟01,接收用戶用于獲取數(shù)據(jù)輸入的讀訪問請求信息,抽取讀訪問請求信息,生成關(guān)鍵詞;步驟02,查詢緩存數(shù)據(jù)庫,確定緩存數(shù)據(jù)庫中未緩存生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,初始化待獲取數(shù)據(jù)的標志值;或者,確定緩存數(shù)據(jù)庫中緩存有生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,但緩存的數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效,設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值;
步驟03,讀數(shù)據(jù)庫從庫,查詢得到生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù);步驟04,獲取讀數(shù)據(jù)庫從庫的時間戳信息,根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置key-value對的數(shù)據(jù)鍵值信息,并更新緩存數(shù)據(jù)庫;步驟05,將查詢得到的數(shù)據(jù)輸出。較佳地,本發(fā)明實施例中,在步驟01之前,還可以進一步包括A01,獲取用戶寫入的數(shù)據(jù)信息,抽取用戶寫入的數(shù)據(jù)信息,生成對應(yīng)的關(guān)鍵詞;A02,查詢緩存數(shù)據(jù)庫,查找是否存在生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,如果存在該數(shù)據(jù)鍵值,將緩存數(shù)據(jù)庫中緩存的該數(shù)據(jù)刪除;如果不存在該數(shù)據(jù)鍵值,根據(jù)生成的關(guān)鍵詞以及用戶寫入的數(shù)據(jù)信息,生成關(guān)鍵詞-數(shù)據(jù)鍵值對,并寫入數(shù)據(jù)庫主庫。實際應(yīng)用中,在將緩存數(shù)據(jù)庫中緩存的該數(shù)據(jù)刪除后,以及寫入數(shù)據(jù)庫主庫后,還可以進一步向用戶返回寫入成功信息。下面基于圖1,對本發(fā)明實施例作進一步詳細描述。圖2為本發(fā)明實施例基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法具體流程示意圖。本發(fā)明實施例提供了用戶通過緩存機制讀取數(shù)據(jù)庫的方法,參見圖2,該流程包括步驟11,接收用戶用于獲取數(shù)據(jù)輸入的讀訪問請求信息;本步驟中,當(dāng)用戶需要獲取數(shù)據(jù),即從數(shù)據(jù)庫中查詢數(shù)據(jù)時,也就是從緩存數(shù)據(jù)庫或數(shù)據(jù)庫從庫中,讀取相應(yīng)數(shù)據(jù),輸入查詢數(shù)據(jù)的查詢語句,即讀訪問請求信息,例如,如果用戶需要搜索數(shù)據(jù)庫以獲取某種技術(shù)資料,舉例來說,需要從數(shù)據(jù)庫中讀取出與technologyinformation相關(guān)的數(shù)據(jù),貝U可以在數(shù)據(jù)庫的讀數(shù)據(jù)窗口界面中輸入讀訪問請求信息techno logy informat ion ο本發(fā)明實施例中,設(shè)要獲取的數(shù)據(jù)為變量data。步驟12,抽取讀訪問請求信息,生成關(guān)鍵詞;本步驟中,根據(jù)用戶輸入的讀訪問請求信息-technology information,進行抽取操作,生成關(guān)鍵詞(key)為tech_info。例如,可以根據(jù)預(yù)先設(shè)置的關(guān)鍵詞生成軟件,對用戶輸入的信息進行處理,生成關(guān)鍵詞,關(guān)于抽取讀訪問請求信息,生成關(guān)鍵詞的流程,具體可參見相關(guān)技術(shù)文獻,在此不再贅述。步驟13,查詢緩存數(shù)據(jù)庫,判斷緩存數(shù)據(jù)庫中是否存在生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,如果是,執(zhí)行步驟14,否則,初始化待獲取數(shù)據(jù)的標志值,執(zhí)行步驟15 ;本步驟中,在需要查詢待獲取數(shù)據(jù)時,首先從緩存數(shù)據(jù)庫中進行查詢,如果緩存數(shù)據(jù)庫中存儲有關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,則提取數(shù)據(jù)鍵值中包含的數(shù)據(jù),直接向用戶返回查詢得到的數(shù)據(jù),則可以避免從數(shù)據(jù)庫從庫中查詢待獲取數(shù)據(jù),從而有效提高讀數(shù)據(jù)的速率和效率。
本發(fā)明實施例中,在緩存數(shù)據(jù)庫中查找是否存在key為tach_infο的數(shù)據(jù)鍵值,如果存在該數(shù)據(jù)鍵值,執(zhí)行步驟14,如果不存在該數(shù)據(jù)鍵值,初始化待獲取數(shù)據(jù)的標志值,例如,設(shè)定待獲取數(shù)據(jù)的標志值(flag)為O為某一預(yù)先設(shè)置的常數(shù),執(zhí)行步驟15。本發(fā)明實施例中,緩存數(shù)據(jù)庫中,以關(guān)鍵詞-數(shù)據(jù)鍵值存儲數(shù)據(jù),其中,關(guān)鍵詞可以根據(jù)實際應(yīng)用中的需求,利用關(guān)鍵詞提取技術(shù),對大量的查詢語句進行提取得到,當(dāng)然,實際應(yīng)用中,也可以由數(shù)據(jù)庫維護者根據(jù)用戶需求設(shè)定;數(shù)據(jù)鍵值(value)包含時間戳(time)、標志(flag)以及數(shù)據(jù)(data),即存儲的數(shù)據(jù)中,攜帶有關(guān)鍵詞信息、時間戳信息以及標志信息,與現(xiàn)有采用關(guān)鍵詞-數(shù)據(jù)鍵值存儲數(shù)據(jù)不同的是,本發(fā)明實施例中,其時間戳值可動態(tài)調(diào)整,此外,還增加了用于作為動態(tài)調(diào)整緩存數(shù)據(jù)有效時間的計算因子,即標志,其中,時間戳,用于標識緩存數(shù)據(jù)有效時間;標志,用于作為動態(tài)調(diào)整緩存數(shù)據(jù)有效時間的計算因子。步驟14,解析查詢得到的數(shù)據(jù)鍵值,獲得數(shù)據(jù)鍵值中包含的時間戳信息,判斷解析時的當(dāng)前時間戳與獲得的時間戳,如果當(dāng)前時間戳小于或等于獲得的時間戳,將查詢得到的數(shù)據(jù)鍵值中包含的數(shù)據(jù)作為待獲取數(shù)據(jù),執(zhí)行步驟17 ;如果當(dāng)前時間戳大于獲得的時間戳,設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值,執(zhí)行步驟15 ;本步驟中,解析查詢得到的數(shù)據(jù)鍵值,得到時間戳(timeO)、標志(flagO)和數(shù)據(jù)(dataO),設(shè)當(dāng)前時間戳為timel,將得到的時間戳與當(dāng)前時間戳進行比較,S卩比較timel與timeO的大小如果timel小于或等于timeO,即小于或等于緩存數(shù)據(jù)有效時間,說明緩存數(shù)據(jù)庫中當(dāng)前緩存的數(shù)據(jù)dataO在有效期內(nèi),將dataO賦值給data,即將該緩存的數(shù)據(jù)作為待獲取數(shù)據(jù),執(zhí)行步驟17 ;如果timel大于timeO,即大于緩存數(shù)據(jù)有效時間,說明緩存數(shù)據(jù)庫中當(dāng)前緩存的數(shù)據(jù)dataO已超出有效期,數(shù)據(jù)無效,因而,查詢得到的該數(shù)據(jù)不能作為待獲取數(shù)據(jù),設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值,即將待獲取數(shù)據(jù)的標志值flag設(shè)定為flagO,執(zhí)行步驟15 ;步驟15,讀數(shù)據(jù)庫從庫,查詢得到生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù),將該數(shù)據(jù)作為待獲取數(shù)據(jù);本步驟中,從數(shù)據(jù)庫從庫中查詢是否存在與生成的關(guān)鍵詞相匹配的關(guān)鍵詞,如果存在相匹配的關(guān)鍵詞,獲取該匹配的關(guān)鍵詞對應(yīng)的數(shù)據(jù)datal,將datal賦值給data ;如果不存在,則結(jié)束讀數(shù)據(jù)流程,向用戶返回讀數(shù)據(jù)失敗信息。本發(fā)明實施例中,數(shù)據(jù)庫從庫中緩存的數(shù)據(jù)格式與現(xiàn)有技術(shù)相同,采用關(guān)鍵詞-數(shù)據(jù)作為存儲格式。步驟16,獲取讀數(shù)據(jù)庫從庫的時間戳信息,根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置key-value對的數(shù)據(jù)鍵值信息,并更新緩存數(shù)據(jù)庫;本步驟中,通過設(shè)定緩存key-value對的value信息,將key-value對存儲到緩存數(shù)據(jù)庫中,從而實現(xiàn)對緩存數(shù)據(jù)庫中該數(shù)據(jù)緩存數(shù)據(jù)有效時間的更新。設(shè)讀數(shù)據(jù)庫從庫的時間戳為time2,其中,設(shè)定value中的時間戳值計算公式為time=time2+α χ ηflag式中,time為更新的緩存數(shù)據(jù)有效時間;time2為讀數(shù)據(jù)庫從庫的時間戳;α為數(shù)據(jù)基準有效時間;η為基準擴展值;flag'為更新數(shù)據(jù)的標志; flag' =f lag+1flag為待獲取數(shù)據(jù)的標志。其中,Bxnfw也成為有效時間間隔,設(shè)置時,主要考慮對于讀寫改變頻率快的數(shù)據(jù),其有效時間間隔較短;對于讀寫改變頻率慢的數(shù)據(jù),其有效時間間隔較長。本發(fā)明實施例中,控制有效時間間隔長短的量是標志flag的值,如果緩存中數(shù)據(jù)經(jīng)常處于無效狀態(tài),表明讀寫改變頻率較快,通過將該數(shù)據(jù)對應(yīng)的標志flag的值設(shè)置為0,從而可以使得其有效時間間隔較長。數(shù)據(jù)基準有效時間,由緩存管理者根據(jù)實際情況設(shè)定,可以是經(jīng)驗時間,例如,10s、30s等,只要滿足對于單位時間內(nèi)訪問次數(shù)較多的數(shù)據(jù),其對應(yīng)的數(shù)據(jù)基準有效時間較小,而對于單位時間內(nèi)訪問次數(shù)較少的數(shù)據(jù),其對應(yīng)的數(shù)據(jù)基準有效時間較大即可,當(dāng)然,實際應(yīng)用中,也可以根據(jù)動態(tài)統(tǒng)計的數(shù)據(jù)訪問頻率,適時調(diào)整對應(yīng)的數(shù)據(jù)基準有效時間;基準擴展值是每次設(shè)定數(shù)據(jù)基準有效時間間隔的倍數(shù),可以由緩存管理者根據(jù)實際應(yīng)用情況設(shè)定,為正值,一般大于1,例如,取為2或其他常數(shù)值;本發(fā)明實施例中,在每次從緩存數(shù)據(jù)庫中讀取的緩存數(shù)據(jù)失效后,將待獲取數(shù)據(jù)的標志值flag設(shè)定為flagO,在設(shè)置key-value對的數(shù)據(jù)鍵值信息時,更新待獲取數(shù)據(jù)的標志值flag,即將flagO執(zhí)行加I作為更新的待獲取數(shù)據(jù)的標志值flag。實際應(yīng)用中,設(shè)定的時間戳值公式也可以采用其他公式,例如,改變上式中的指數(shù)值,time=time2+α χ η1+flag ;再例如,還可以設(shè)置為time=time2+α χ η xflag'等。這樣,緩存的數(shù)據(jù)的value由時間戳time、標志flag和數(shù)據(jù)data拼接而成,鍵值為生成的關(guān)鍵詞。舉例來說,假設(shè)有一客戶信息數(shù)據(jù)庫,包含緩存數(shù)據(jù)庫、數(shù)據(jù)庫主庫以及數(shù)據(jù)庫從庫,用戶需要查找客戶名為angle的信息,假設(shè)客戶信息數(shù)據(jù)庫使用Memcached做數(shù)據(jù)緩存庫,用戶名angle對應(yīng)的關(guān)鍵詞key為客戶名自身,即angle,用戶輸入讀訪問請求信息angle,客戶信息數(shù)據(jù)庫先在緩存數(shù)據(jù)庫中查找關(guān)鍵詞angle對應(yīng)的數(shù)據(jù)鍵值。如果在緩存數(shù)據(jù)庫中存在key為angle的數(shù)據(jù)鍵值,進行解析,其value為2012 06 1200 00 00 ;1 ;tel :xxxx,其中,時間戳 timeO 為 2012 06 :1200 00 :00、標志 flagO 為
I、dataO 為 tel :xxxx。
假設(shè)解析時的當(dāng)前時間戳timel為2012 08 :2100 00 :00,則由于timel大于timeO,說明數(shù)據(jù)dataO已超出有效期,數(shù)據(jù)無效,則讀數(shù)據(jù)庫從庫,查找關(guān)鍵詞為angle的信息,獲取angle對應(yīng)的數(shù)據(jù)data為tel aaxx,將data返回給用戶,并重設(shè)Memcached的緩存數(shù)據(jù)。獲取讀數(shù)據(jù)庫從庫的時間戳(也可以是重設(shè)Memcached的緩存數(shù)據(jù)的時間戳)time2,例如,time2為2012 08 :2100 01 00o由于重設(shè)Memcached的緩存數(shù)據(jù)的時間戳與解析時的當(dāng)前時間戳(也可以是訪問數(shù)據(jù)庫從庫獲得數(shù)據(jù)的時間戳)不一致,因而,time2與timel不同。設(shè)定待獲取數(shù)據(jù)(待更新的緩存數(shù)據(jù)鍵值)flag=flagO+l = 2,取數(shù)據(jù)基準有效時間為30s,則可計算得到Memcached中緩存數(shù)據(jù)有效期(緩存數(shù)據(jù)有效時間)為
time=time2+ α χ ηflag =2012 :08 :2100 :03 :00如此,可設(shè)定key為angle的數(shù)據(jù)在Memcached中保存的value為2012 08 :2100 03 00 ;2 ;tel :aaxx。如果解析時的當(dāng)前時間戳timel為2012 06 :1100 00 :00,由于timel小于timeO, Memcached中數(shù)據(jù)仍然有效,此時,直接將data賦值為tel :xxxx,并返回給用戶即可。步驟17,將待獲取數(shù)據(jù)返回給用戶。圖3為本發(fā)明實施例基于數(shù)據(jù)緩存的寫數(shù)據(jù)方法具體流程示意圖。本實施例提供了用戶通過緩存機制寫數(shù)據(jù)庫的方法,寫完數(shù)據(jù)庫主庫時,更新緩存Memcached中的數(shù)據(jù),參見圖3,該流程包括步驟21,獲取用戶寫入的數(shù)據(jù)信息;本步驟中,可以在數(shù)據(jù)庫的寫數(shù)據(jù)窗口界面中輸入數(shù)據(jù)信息。步驟22,抽取用戶寫入的數(shù)據(jù)信息,生成對應(yīng)的關(guān)鍵詞;本步驟中,如果用戶需要往數(shù)據(jù)庫中寫入數(shù)據(jù),例如,需要寫入某種技術(shù)資料technology information,則可以輸入technologyin formation及其具體內(nèi)容,數(shù)據(jù)庫抽取用戶寫入的數(shù)據(jù)信息,生成關(guān)鍵詞為tech_info,設(shè)定緩存key-value對的key為tech_info。本發(fā)明實施例中,key值是根據(jù)用戶訪問數(shù)據(jù)庫的關(guān)鍵詞獲取的,例如,訪問Mysql中的數(shù)據(jù)時需要主鍵,可以根據(jù)主鍵設(shè)定Memcached中key。而如何設(shè)定key,可以由Memcached管理員自定,可以將主鍵作為key,也可以將主鍵與其他信息作為key。本發(fā)明主要是對value值做設(shè)定,與key無關(guān)。步驟23,查詢緩存數(shù)據(jù)庫,查找是否存在key為tech_info對應(yīng)的數(shù)據(jù)鍵值,如果存在該數(shù)據(jù)鍵值,執(zhí)行步驟24,如果不存在該數(shù)據(jù)鍵值,執(zhí)行步驟25 ;步驟24,將緩存數(shù)據(jù)庫中緩存的該數(shù)據(jù)刪除,執(zhí)行步驟26 ;步驟25,根據(jù)生成的關(guān)鍵詞以及用戶寫入的數(shù)據(jù)信息,生成關(guān)鍵詞-數(shù)據(jù)鍵值對,并寫入數(shù)據(jù)庫主庫;步驟26,向用戶返回寫入成功信息。由上述可見,本發(fā)明實施例基于數(shù)據(jù)緩存的讀寫數(shù)據(jù)方法,在原始數(shù)據(jù)的基礎(chǔ)上,通過額外增加時間戳和標志flag,時間戳用來標志數(shù)據(jù)的有效期,即緩存數(shù)據(jù)有效時間,標志用來計算有效時間,即作為動態(tài)調(diào)整緩存數(shù)據(jù)有效時間的計算因子;并設(shè)定更新數(shù)據(jù)的時間戳為當(dāng)前時間與有效時間間隔之和,其中,有效時間間隔與數(shù)據(jù)基準有效時間、基準擴展值以及標志有關(guān),在設(shè)定有效時間間隔時,利用了如下思想讀寫改變頻率快的數(shù)據(jù),其有效時間間隔較短;讀寫改變頻率慢的數(shù)據(jù),其有效時間間隔較長,控制有效時間間隔長短的量是標志flag的值。這樣,對于讀寫改變頻率快的數(shù)據(jù),更新頻率較快,對于讀寫改變頻率慢的數(shù)據(jù),更新頻率慢,從而在保證數(shù)據(jù)讀寫一致性的基礎(chǔ)上,降低了由于緩存數(shù)據(jù)庫中數(shù)據(jù)頻繁失效導(dǎo)致的緩存命中率降低,影響緩存的效率的問題,較好地達到了數(shù)據(jù)一致性和訪問緩存的高效性之間的平衡。舉例來說,假如有keyO及其對應(yīng)的值valueO,如果對keyO,長時間沒有進行讀操作,即不改變keyO的值,隨著時間的增加,其valueO中對應(yīng)的flag值會隨著valueO的失效而逐漸增加,valueO每失效一次,flag增加1,即有效時間間隔變?yōu)榍耙淮蔚幕鶞蕯U展值的倍數(shù)。本發(fā)明實施例中,由于有效時間間隔呈指數(shù)增長,因而,只需要很少次數(shù)的讀取數(shù)據(jù)庫,即可將有效時間變的很長。設(shè)預(yù)定時間為t,則value的失效次數(shù),即在預(yù)定的時間內(nèi),需要對緩存數(shù)據(jù)進行讀訪問以更新的次數(shù)為log(t/數(shù)據(jù)基準有效時間)/log (基準擴展值)。因而,與傳統(tǒng)的策略相比,需要對緩存數(shù)據(jù)進行讀訪問以更新的次數(shù)要少,少的次數(shù)為log(t/數(shù)據(jù)基準有效時間)/log(基準擴展值)-I。如果keyO對應(yīng)的數(shù)據(jù)寫操作頻繁,則其有效時間間隔約為數(shù)據(jù)基準有效時間,與傳統(tǒng)的策略相比,當(dāng)基準有效時間設(shè)定較小時,數(shù)據(jù)不一致的持續(xù)時間也很小。本發(fā)明實施例中,在每次數(shù)據(jù)失效后,Memcached中如果仍然有該數(shù)據(jù),則flag并沒有設(shè)定為O。只有在寫數(shù)據(jù)庫主庫時,將數(shù)據(jù)刪除或者在Memcached自動清理過期數(shù)據(jù)時,將數(shù)據(jù)刪除后,Memcached中不存在關(guān)鍵字為key的數(shù)據(jù)鍵值時,將flag設(shè)定為0,若不存在該數(shù)據(jù)項,將flag設(shè)定為O。再舉一具體例子,設(shè)用于統(tǒng)計的時間為I小時,傳統(tǒng)策略中設(shè)定有效時間分別為100s和10s,其中,失效時間相當(dāng)于本發(fā)明實施例的數(shù)據(jù)基準有效時間,相應(yīng)地,設(shè)本策略中數(shù)據(jù)基準有效時間也分別為100s和10s,基準擴展值為2,則在I小時內(nèi),傳統(tǒng)策略與本發(fā)明策略的數(shù)據(jù)對比分別如表I和表2所示。其中,表I設(shè)定的有效時間為100s,表2設(shè)定的有效時間為10s。表I
權(quán)利要求
1.一種基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法,該方法包括接收用戶用于獲取數(shù)據(jù)輸入的讀訪問請求信息,抽取讀訪問請求信息,生成關(guān)鍵詞;查詢緩存數(shù)據(jù)庫,確定緩存數(shù)據(jù)庫中未緩存生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,初始化待獲取數(shù)據(jù)的標志值;或者,確定緩存數(shù)據(jù)庫中緩存有生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,但緩存的數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效,設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值; 讀數(shù)據(jù)庫從庫,查詢得到生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù); 獲取讀數(shù)據(jù)庫從庫的時間戳信息,根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置鍵值對的數(shù)據(jù)鍵值信息,并更新緩存數(shù)據(jù)庫; 將查詢得到的數(shù)據(jù)輸出。
2.根據(jù)權(quán)利要求I所述的方法,其中,在所述接收用戶用于獲取數(shù)據(jù)輸入的讀訪問請求信息之前,進一步包括 獲取用戶寫入的數(shù)據(jù)信息,抽取用戶寫入的數(shù)據(jù)信息,生成對應(yīng)的關(guān)鍵詞; 查詢緩存數(shù)據(jù)庫,查找是否存在生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,如果存在該數(shù)據(jù)鍵值,將緩存數(shù)據(jù)庫中緩存的該數(shù)據(jù)刪除;如果不存在該數(shù)據(jù)鍵值,根據(jù)生成的關(guān)鍵詞以及用戶寫入的數(shù)據(jù)信息,生成關(guān)鍵詞-數(shù)據(jù)鍵值對,并寫入數(shù)據(jù)庫主庫。
3.根據(jù)權(quán)利要求I或2所述的方法,其中,緩存數(shù)據(jù)庫中,以關(guān)鍵詞-數(shù)據(jù)鍵值存儲數(shù)據(jù),所述數(shù)據(jù)鍵值包含時間戳、標志以及數(shù)據(jù)。
4.根據(jù)權(quán)利要求3所述的方法,其中,所述初始化待獲取數(shù)據(jù)的標志值包括 設(shè)定待獲取數(shù)據(jù)的標志值為O。
5.根據(jù)權(quán)利要求4所述的方法,其中,所述緩存的數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效包括 解析查詢得到的數(shù)據(jù)鍵值,獲得數(shù)據(jù)鍵值中包含的時間戳信息,判斷解析時的當(dāng)前時間戳與獲得的時間戳,如果當(dāng)前時間戳大于獲得的時間戳,確定該數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效。
6.根據(jù)權(quán)利要求5所述的方法,其中,進一步包括 如果當(dāng)前時間戳小于或等于獲得的時間戳,將查詢得到的數(shù)據(jù)鍵值中包含的數(shù)據(jù)作為待獲取數(shù)據(jù)輸出。
7.根據(jù)權(quán)利要求5所述的方法,其中,所述根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置鍵值對的數(shù)據(jù)鍵值信息包括 將待獲取數(shù)據(jù)作為數(shù)據(jù)鍵值信息中的數(shù)據(jù); 將設(shè)置的待獲取數(shù)據(jù)的標志加1,作為數(shù)據(jù)鍵值信息中的標志; 根據(jù)數(shù)據(jù)鍵值信息中的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及預(yù)先設(shè)置的時間戳值計算公式,計算更新的緩存數(shù)據(jù)有效時間,作為數(shù)據(jù)鍵值信息中的時間戳。
8.根據(jù)權(quán)利要求7所述的方法,其中,所述時間戳值計算公式為time=time2+a χ η 38 式中, time為更新的緩存數(shù)據(jù)有效時間; time2為讀數(shù)據(jù)庫從庫的時間戳; a為數(shù)據(jù)基準有效時間;η為基準擴展值; flag'為更新數(shù)據(jù)的標志;flag' =flag+1 ; flag為待獲取數(shù)據(jù)的標志。
9.根據(jù)權(quán)利要求I或2所述的方法,其中,所述在將緩存數(shù)據(jù)庫中緩存的該數(shù)據(jù)刪除后,或,寫入數(shù)據(jù)庫主庫后,進一步包括向用戶返回寫入成功信息。
10.根據(jù)權(quán)利要求I或2所述的方法,其中,進一步包括 如果查詢數(shù)據(jù)庫從庫,不存在與生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù),向用戶返回讀數(shù)據(jù)失敗信肩、O
11.一種基于數(shù)據(jù)緩存的讀數(shù)據(jù)裝置,其特征在于,該裝置包括讀數(shù)據(jù)模塊、緩存數(shù)據(jù)庫模塊以及數(shù)據(jù)庫從庫模塊,其中, 讀數(shù)據(jù)模塊,用于接收用戶用于獲取數(shù)據(jù)輸入的讀訪問請求信息,抽取讀訪問請求信息,生成關(guān)鍵詞; 緩存數(shù)據(jù)庫模塊,用于根據(jù)讀數(shù)據(jù)模塊生成的關(guān)鍵詞進行查詢,確定緩存數(shù)據(jù)庫中未緩存生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,初始化待獲取數(shù)據(jù)的標志值;或者,確定緩存數(shù)據(jù)庫中緩存有生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,但緩存的數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效,設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值; 數(shù)據(jù)庫從庫模塊,用于讀數(shù)據(jù)庫從庫,查詢得到生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù),將查詢得到的數(shù)據(jù)輸出; 獲取讀數(shù)據(jù)庫從庫的時間戳信息,根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置鍵值對的數(shù)據(jù)鍵值信息,并更新緩存數(shù)據(jù)庫。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述緩存數(shù)據(jù)庫模塊包括查詢單元、判斷單元、初始化單元以及數(shù)據(jù)鍵值處理單元,其中, 查詢單元,用于根據(jù)讀數(shù)據(jù)模塊生成的關(guān)鍵詞進行查詢; 判斷單元,判斷查詢單元是否查詢到生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,如果是,將查詢得到的數(shù)據(jù)鍵值輸出至數(shù)據(jù)鍵值處理單元;否則,向初始化單元輸出觸發(fā)信息; 初始化單元,用于根據(jù)接收的觸發(fā)信息,初始化待獲取數(shù)據(jù)的標志值,向數(shù)據(jù)庫從庫模塊輸出; 數(shù)據(jù)鍵值處理單元,用于解析查詢得到的數(shù)據(jù)鍵值,獲得數(shù)據(jù)鍵值中包含的時間戳信息,判斷解析時的當(dāng)前時間戳與獲得的時間戳,如果當(dāng)前時間戳小于或等于獲得的時間戳,將查詢得到的數(shù)據(jù)鍵值中包含的數(shù)據(jù)作為待獲取數(shù)據(jù)輸出;如果當(dāng)前時間戳大于獲得的時間戳,設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值,向數(shù)據(jù)庫從庫模塊輸出。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,進一步包括寫數(shù)據(jù)模塊以及數(shù)據(jù)庫主庫模塊,其中, 寫數(shù)據(jù)模塊,獲取用戶寫入的數(shù)據(jù)信息,抽取用戶寫入的數(shù)據(jù)信息,生成對應(yīng)的關(guān)鍵詞; 緩存數(shù)據(jù)庫模塊,進一步用于根據(jù)寫數(shù)據(jù)模塊生成的關(guān)鍵詞進行查詢,查找是否存在生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,如果存在該數(shù)據(jù)鍵值,將緩存數(shù)據(jù)庫中緩存的該數(shù)據(jù)刪除;如果不存在該數(shù)據(jù)鍵值,根據(jù)生成的關(guān)鍵詞以及用戶寫入的數(shù)據(jù)信息,生成關(guān)鍵詞-數(shù)據(jù)鍵值對,并寫入數(shù)據(jù)庫主庫模塊; 數(shù)據(jù)庫主庫模塊,用于接收緩存數(shù)據(jù)庫模塊寫入的關(guān)鍵詞-數(shù)據(jù)鍵值對,進行存儲。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述緩存數(shù)據(jù)庫模塊進一步包括 寫數(shù)據(jù)處理單元,用于判斷查詢單元是否根據(jù)寫數(shù)據(jù)模塊生成的關(guān)鍵詞查詢到對應(yīng)的數(shù)據(jù)鍵值,如果是,將緩存該數(shù)據(jù)刪除;如果不存在該數(shù)據(jù)鍵值,根據(jù)生成的關(guān)鍵詞以及用戶寫入的數(shù)據(jù)信息,生成關(guān)鍵詞-數(shù)據(jù)鍵值對,并寫入數(shù)據(jù)庫主庫模塊。
15.根據(jù)權(quán)利要求11至14任一項所述的裝置,其特征在于,所述根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置鍵值對的數(shù)據(jù)鍵值信息包括 將待獲取數(shù)據(jù)作為數(shù)據(jù)鍵值信息中的數(shù)據(jù); 將設(shè)置的待獲取數(shù)據(jù)的標志加1,作為數(shù)據(jù)鍵值信息中的標志; 根據(jù)數(shù)據(jù)鍵值信息中的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及預(yù)先設(shè)置的時間戳值計算公式,計算更新的緩存數(shù)據(jù)有效時間,作為數(shù)據(jù)鍵值信息中的時間戳。
16.根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述時間戳值計算公式為 time=time2+ α χ ηflag 式中, time為更新的緩存數(shù)據(jù)有效時間; time2為讀數(shù)據(jù)庫從庫的時間戳; α為數(shù)據(jù)基準有效時間; n為基準擴展值; flag'為更新數(shù)據(jù)的標志;flag' =flag+1 ; flag為待獲取數(shù)據(jù)的標志。
全文摘要
本發(fā)明公開了一種基于數(shù)據(jù)緩存的讀數(shù)據(jù)方法及裝置。接收用戶用于獲取數(shù)據(jù)輸入的讀訪問請求信息,抽取生成關(guān)鍵詞;確定緩存數(shù)據(jù)庫中未緩存生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,初始化待獲取數(shù)據(jù)的標志值;或者,確定緩存數(shù)據(jù)庫中緩存有生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù)鍵值,但緩存的數(shù)據(jù)鍵值中包含的數(shù)據(jù)失效,設(shè)定待獲取數(shù)據(jù)的標志值為獲得的數(shù)據(jù)鍵值中包含的標志值;讀數(shù)據(jù)庫從庫,查詢得到生成的關(guān)鍵詞對應(yīng)的數(shù)據(jù);獲取讀數(shù)據(jù)庫從庫的時間戳信息,根據(jù)設(shè)置的待獲取數(shù)據(jù)的標志、讀數(shù)據(jù)庫從庫的時間戳信息以及待獲取數(shù)據(jù),設(shè)置鍵值對的數(shù)據(jù)鍵值信息,并更新緩存數(shù)據(jù)庫;將查詢得到的數(shù)據(jù)輸出。應(yīng)用本發(fā)明,可以提升數(shù)據(jù)的緩存效率,優(yōu)化數(shù)據(jù)緩存的綜合性能。
文檔編號G06F17/30GK102902730SQ201210333370
公開日2013年1月30日 申請日期2012年9月10日 優(yōu)先權(quán)日2012年9月10日
發(fā)明者全宗峰 申請人:新浪網(wǎng)技術(shù)(中國)有限公司