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