專利名稱:服務器端無障礙存取高速緩存數據的方法
技術領域:
本發(fā)明屬于計算機信息處理技術,具體涉及一種服務器端無障礙存取高速緩存數 據的方法。
背景技術:
目前,在計算機服務器上數據緩存技術通常存在兩種方式,一種為實時數據區(qū)和 緩存數據區(qū)一體化的方式,另一種為實時數據區(qū)和緩存數據區(qū)分開的方式,這兩種方式分 別存在著缺陷和不足。實時數據區(qū)和緩存數據區(qū)一體化的方式存在如下缺陷 在服務器集群的方式下,變更數據只能最先在一個服務器的數據緩存區(qū)同步, 然后通過服務器間的同步機制進行數據同步,后者效率較低。服務器站點越多、更新越頻 繁、緩存的對象越大,越影響性能。 數據變更操作會阻塞數據讀取操作,影響讀取操作效率。變更數據操作和讀取 數據操作越頻繁,影響越嚴重。 不經過服務器的數據變更處理后,其變更的數據無法進入到緩存區(qū)中。實時數 據區(qū)和緩存數據區(qū)分開的方式存在如下缺陷 數據緩存區(qū)的數據與最新實時數據之間存在的時間差過長。 為了減少這個時間差,就采取加快刷新緩存區(qū)操作的頻率的方式,而這種方式 又會引起數據緩存區(qū)的讀取操作和刷新操作之間相互阻塞影響。刷新操作和讀取操作越頻 繁,影響越嚴重。另外,由于現有的數據緩存方案通常采用單緩存區(qū),讀取緩存區(qū)操作和刷新緩存 區(qū)操作均針對同一個緩存區(qū)進行,互相阻塞,存在沖突。
發(fā)明內容
本發(fā)明的目的是為了解決現有技術中存在的緩存區(qū)的刷新操作和讀取操作相沖 突的問題,并避免服務器集群方式下的緩存數據和實時數據不一致的問題,提供一種服務 器端無障礙存取高速緩存數據的方法。本發(fā)明的技術方案如下一種服務器端無障礙存取高速緩存數據的方法,包括如 下步驟(1)在服務器集群的每個服務器進程中創(chuàng)建一個數據緩存對象,數據緩存對象在 內存中建立兩個數據緩存區(qū)、兩個對應的讀計數器、一個緩存區(qū)標志;(2)在每個服務器進程中創(chuàng)建一個獨立的線程,用于刷新數據緩存對象中的兩個 數據緩存區(qū),在任一時刻,其中一個緩存區(qū)已經準備好數據供其他線程讀取,另外一個緩存 區(qū)在進行刷新操作,刷新完成后將其標志為當前已經準備好的緩存區(qū);(3)在進行緩存區(qū)數據的讀取操作時,通過判斷緩存區(qū)標志的值,讀取其中一個已 經準備好的緩存區(qū)的數據。
進一步,如上所述的服務器端無障礙存取高速緩存數據的方法,在步驟(2)中,獨 立的線程依次循環(huán)刷新兩個數據緩存區(qū),在完成第一緩存區(qū)的數據刷新后,設置緩存區(qū)標 志使其標志為第一緩存區(qū)準備好可讀;然后刷新第二緩存區(qū),完成第二緩存區(qū)的刷新后,設 置緩存區(qū)標志使其標志為第二緩存區(qū)準備好可讀。更進一步,如上所述的服務器端無障礙存取高速緩存數據的方法,在步驟(2)中, 在刷新其中一個數據緩存區(qū)之前,先判斷其對應的讀計數器是否為0,如果不為0,則表示 當前還有讀緩存區(qū)的操作正在進行,用于刷新緩存區(qū)的獨立線程進入等待狀態(tài),直到對應 的讀計數器為0,再進行刷新操作。進一步,如上所述的服務器端無障礙存取高速緩存數據的方法,在步驟(3)中,判 斷緩存區(qū)標志的值,如果其標志為第一緩存區(qū)準備好可讀,則讀取第一緩存區(qū)的數據,如果 其標志為第二緩存區(qū)準備好可讀,則讀取第二緩存區(qū)的數據。更進一步,如上所述的服務器端無障礙存取高速緩存數據的方法,在步驟(3)中, 在讀取其中一個緩存區(qū)的數據之前,設置其對應的讀計數器加1,數據讀取結束后,設置其 對應的讀計數器減1。本發(fā)明的有益效果如下本發(fā)明所提供的服務器端無障礙存取高速緩存數據的方 法,在每個服務器進程中創(chuàng)建數據緩存對象,并創(chuàng)建獨立的刷新進程,能夠在服務器集群的 方式下,將變更的數據高效獨立地同步到各個服務器的數據緩存區(qū)中;由于采用雙緩存區(qū) 的技術手段,數據緩存區(qū)的讀取操作不會被阻塞;而且可以任意縮短刷新緩存區(qū)的時間間 隔。
圖1為本發(fā)明的方法流程圖;圖2為本發(fā)明的功能結構示意圖。
具體實施例方式下面結合附圖和實施例對本發(fā)明進行詳細的描述。如圖1所示,本發(fā)明所提供的服務器端無障礙存取高速緩存數據的方法包括如下 步驟步驟1、創(chuàng)建數據緩存對象X首先,在每個服務器進程中創(chuàng)建一個數據緩存對象X。數據緩存對象X在內存中 建立兩個數據緩存區(qū)(bufl、buf2)、兩個對應的讀計數器(cntl、cnt2)、一個緩存區(qū)標志 (flag)。步驟2、創(chuàng)建獨立的線程T,用于刷新緩存數據在每個服務器進程中創(chuàng)建一個獨立的線程T。線程T用于刷新數據緩存對象X中 的兩個數據緩存區(qū)(bufl、buf 2),并設置緩存區(qū)標志(flag)。線程是一段完成某個特定功能的代碼,是程序中單個順序的流控制。本發(fā)明利用 單個程序中可以同時運行多個線程來執(zhí)行不同任務的原理,創(chuàng)建一個專門的線程用來刷新 兩個數據緩存區(qū)(buf!、buf2),并設置緩存區(qū)標志(flag)。線程T刷新兩個緩存區(qū)的方式是 依次循環(huán)刷新緩存區(qū)bufl和緩存區(qū)buf2。在完成緩存區(qū)bufl的數據刷新后,設置緩存區(qū)標志(flag)使其標志為bufl準備好可讀,停頓一段時間后(可選),然后刷新緩存區(qū)buf2, 完成緩存區(qū)buf2的刷新后,設置緩存區(qū)標志(flag)使其標志為buf2準備好可讀。線程T在刷新某個數據緩存區(qū)之前,先判斷其對應的讀計數器是否為0 (讀計數器 的初始狀態(tài)為0),如果不為0,則表示當前還有讀緩存區(qū)的操作正在進行,線程T進入等待 狀態(tài),直到對應的讀計數器為0,才進行刷新操作。如線程T在刷新數據緩存區(qū)bufl之前, 先判斷讀計數器cntl是否為0,并等待直到讀計數器cntl為0才刷新數緩存區(qū)bufl。步驟3、讀取數據緩存區(qū)緩存區(qū)數據讀取操作時,判斷緩存區(qū)標志(flag)的值,如果其標志為緩存區(qū)bufl 準備好可讀,則讀取緩存區(qū)bufl的數據,如果其標志為緩存區(qū)buf2準備好可讀,則讀取緩 存區(qū)buf2的數據。讀取某個緩存區(qū)的數據前,設置其對應的讀計數器加1,數據讀取結束后,設置其 對應的讀計數器減1。如讀取緩存區(qū)bufl前,將讀計數器cntl加1,讀取結束后,將讀計 數器cntl減1。如圖2的功能結構所示,通過上述方法的步驟,服務器進程中的獨立線程先判斷 緩存區(qū)bufl對應的讀計數器是否為0,如果為0,則刷新緩存區(qū)bufl,設置緩存區(qū)標志flag 使其標志為bufl準備好可讀,然后經過一段時間,判斷緩存區(qū)buf2對應的讀計數器是否為 0,如果為0,再刷新緩存區(qū)buf2,設置緩存區(qū)標志flag使其標志為buf2準備好可讀;同時, 緩存區(qū)的數據讀取線程判斷緩存區(qū)標志flag的值,確定緩存區(qū)bufl是否準備好可讀,如果 準備好可讀,設置其對應的讀計數器cntl加1,然后讀取緩存區(qū)bufl的數據,讀取結束后, 將其對應的讀計數器cntl減1,接下來,確定緩存區(qū)buf2是否準備好可讀,如果準備好可 讀,設置其對應的讀計數器cnt2加1,然后讀取緩存區(qū)buf2的數據,讀取結束后,將其對應 的讀計數器cnt2減1。循環(huán)上述操作,便可以實現數據緩存區(qū)的連續(xù)刷新,不會出現讀取操 作被阻塞或延遲的情況。顯然,本領域的技術人員可以對本發(fā)明進行各種形式上的改動和變型而不脫離本 發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要求及其等同技 術的范圍之內,則本發(fā)明也意圖包含這些改動和變型在內。
權利要求
一種服務器端無障礙存取高速緩存數據的方法,包括如下步驟(1)在服務器集群的每個服務器進程中創(chuàng)建一個數據緩存對象,數據緩存對象在內存中建立兩個數據緩存區(qū)、兩個對應的讀計數器、一個緩存區(qū)標志;(2)在每個服務器進程中創(chuàng)建一個獨立的線程,用于刷新數據緩存對象中的兩個數據緩存區(qū),在任一時刻,其中一個緩存區(qū)已經準備好數據供其他線程讀取,另外一個緩存區(qū)在進行刷新操作,刷新完成后將其標志為當前已經準備好的緩存區(qū);(3)在進行緩存區(qū)數據的讀取操作時,通過判斷緩存區(qū)標志的值,讀取其中一個已經準備好的緩存區(qū)的數據。
2.如權利要求1所述的服務器端無障礙存取高速緩存數據的方法,其特征在于在步 驟(2)中,獨立的線程依次循環(huán)刷新兩個數據緩存區(qū),在完成第一緩存區(qū)的數據刷新后,設 置緩存區(qū)標志使其標志為第一緩存區(qū)準備好可讀;然后刷新第二緩存區(qū),完成第二緩存區(qū) 的刷新后,設置緩存區(qū)標志使其標志為第二緩存區(qū)準備好可讀。
3.如權利要求2所述的服務器端無障礙存取高速緩存數據的方法,其特征在于在步 驟(2)中,在刷新其中一個數據緩存區(qū)之前,先判斷其對應的讀計數器是否為0,如果不為 0,則表示當前還有讀緩存區(qū)的操作正在進行,用于刷新緩存區(qū)的獨立線程進入等待狀態(tài), 直到對應的讀計數器為0,再進行刷新操作。
4.如權利要求1所述的服務器端無障礙存取高速緩存數據的方法,其特征在于在步 驟(3)中,判斷緩存區(qū)標志的值,如果其標志為第一緩存區(qū)準備好可讀,則讀取第一緩存區(qū) 的數據,如果其標志為第二緩存區(qū)準備好可讀,則讀取第二緩存區(qū)的數據。
5.如權利要求4所述的服務器端無障礙存取高速緩存數據的方法,其特征在于在步 驟(3)中,在讀取其中一個緩存區(qū)的數據之前,設置其對應的讀計數器加1,數據讀取結束 后,設置其對應的讀計數器減1。
全文摘要
本發(fā)明屬于計算機信息處理技術,具體涉及一種服務器端無障礙存取高速緩存數據的方法。該方法在每個服務器進程中創(chuàng)建一個數據緩存對象,數據緩存對象在內存中建立兩個數據緩存區(qū)、兩個對應的讀計數器、一個緩存區(qū)標志;在每個服務器進程中創(chuàng)建一個獨立的線程,用于刷新兩個數據緩存區(qū),在任一時刻,一個緩存區(qū)已經準備好數據供其他線程讀取,另外一個緩存區(qū)在進行刷新操作,刷新完成后將其標志為當前已經準備好的緩存區(qū);在進行緩存區(qū)數據讀取操作時,判斷緩存區(qū)標志的值,讀取其中一個已經準備好的緩存區(qū)的數據。本發(fā)明能夠在服務器集群的方式下,將變更的數據高效獨立地同步到各個服務器的數據緩存區(qū)中,數據緩存區(qū)的讀取操作不會被阻塞和延遲。
文檔編號G06F12/08GK101887399SQ20101021133
公開日2010年11月17日 申請日期2010年6月28日 優(yōu)先權日2010年6月28日
發(fā)明者陳宏華 申請人:北京用友政務軟件有限公司