專利名稱:一種實(shí)現(xiàn)緩存數(shù)據(jù)訪問與加載并發(fā)進(jìn)行的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)緩存,尤其涉及一種實(shí)現(xiàn)緩存數(shù)據(jù)訪問與加載并發(fā) 進(jìn)行的方法及系統(tǒng)。
背景技術(shù):
在互聯(lián)網(wǎng)數(shù)據(jù)訪問中,客戶端在對(duì)訪問服務(wù)端進(jìn)行查詢、插入和更 新數(shù)據(jù)的請(qǐng)求服務(wù)中,比如說搜索請(qǐng)求服務(wù),會(huì)頻繁搜索讀取的一些相 關(guān)內(nèi)容, 一般的情況是將這些讀取的內(nèi)容數(shù)據(jù)存儲(chǔ)在磁盤上,由于讀取 磁盤的速度很慢,從而會(huì)影響訪問數(shù)據(jù)的速度。
改進(jìn)的方式是將需要頻繁讀取的數(shù)據(jù)在訪問之前提前存儲(chǔ)在內(nèi)存 中,這是因?yàn)橛?jì)算機(jī)訪問內(nèi)存的速度遠(yuǎn)遠(yuǎn)高于訪問磁盤的速度,這樣會(huì) 極大提高訪問數(shù)據(jù)的速度。但是現(xiàn)有技術(shù)中沒有解決在數(shù)據(jù)加載在內(nèi)存 中和訪問數(shù)據(jù)同時(shí)進(jìn)行的問題,而數(shù)據(jù)加載是一種耗時(shí)操作,如果在數(shù) 據(jù)還沒有完全加載完時(shí)處理客戶端的訪問請(qǐng)求,將不能保證客戶端得到 準(zhǔn)確的數(shù)據(jù),并且在數(shù)據(jù)加載的過程中會(huì)影響數(shù)據(jù)的訪問速度。
發(fā)明內(nèi)容
為了解決上述問題,本發(fā)明的目的是使訪問與加載緩存數(shù)據(jù)能夠同 時(shí)進(jìn)行,提高訪問數(shù)據(jù)的速度,并保證訪問存取數(shù)據(jù)的正確性。
為實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案是, 一種實(shí)現(xiàn)緩存數(shù)據(jù)訪問與 加載并發(fā)進(jìn)行的方法,所述方法包括以下步驟
使用兩個(gè)數(shù)據(jù)緩存區(qū)來存儲(chǔ)數(shù)據(jù),所述兩個(gè)數(shù)據(jù)緩存區(qū)中的一個(gè)處 于訪問狀態(tài),另外一個(gè)處于等待狀態(tài);
使用數(shù)據(jù)加載指針和數(shù)據(jù)訪問指針來進(jìn)行兩個(gè)數(shù)據(jù)緩存區(qū)的指向;
在對(duì)緩存數(shù)據(jù)進(jìn)行加載時(shí),使用數(shù)據(jù)加載指針指向處在等待狀態(tài)的 數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的加載;同時(shí)如果需要對(duì)緩存數(shù)據(jù)進(jìn)行訪問,則使用數(shù)據(jù)訪問指針指向處在 訪問狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的訪問;或者
在對(duì)緩存數(shù)據(jù)進(jìn)行訪問時(shí),使用數(shù)據(jù)訪問指針指向處在訪問狀態(tài)的
數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的訪問;
同時(shí)如果需要對(duì)緩存數(shù)據(jù)進(jìn)行加載,使用數(shù)據(jù)加載指針指向處在等
待狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的加載;
其中所述處于訪問狀態(tài)的數(shù)據(jù)緩存區(qū)在訪問結(jié)束之后變?yōu)榈却隣?態(tài),所述處于等待狀態(tài)的數(shù)據(jù)緩存區(qū)在加載完數(shù)據(jù)之后變?yōu)樵L問狀態(tài)。
所述處于訪問狀態(tài)的數(shù)據(jù)緩存區(qū)存儲(chǔ)有數(shù)據(jù),所述處于等待狀態(tài)的 數(shù)據(jù)緩存區(qū)無存儲(chǔ)數(shù)據(jù)。
所述數(shù)據(jù)緩存區(qū)采用哈希表的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù)。
一種實(shí)現(xiàn)訪問與加載緩存數(shù)據(jù)并發(fā)進(jìn)行的系統(tǒng),所述系統(tǒng)包括
數(shù)據(jù)存取模塊,與數(shù)據(jù)存取模塊相連接的第一指針管理模塊,與第 一和第二指針管理模塊相連接的數(shù)據(jù)緩存模塊,與第二指針管理模塊相
連接的數(shù)據(jù)管理模塊;
其中所述數(shù)據(jù)存取模塊,用來獲取并分析客戶端的請(qǐng)求數(shù)據(jù)包,并 把訪問數(shù)據(jù)的請(qǐng)求指令發(fā)給第一指針管理模塊;
所述第一指針管理模塊,用來管理數(shù)據(jù)訪問指針指向數(shù)據(jù)緩存模塊 中處于訪問狀態(tài)的數(shù)據(jù)緩存區(qū),以使對(duì)所述數(shù)據(jù)緩存模塊進(jìn)行訪問數(shù)據(jù) 的存?。?br>
所述數(shù)據(jù)緩存模塊,用來存儲(chǔ)需要頻繁讀取的數(shù)據(jù),包括處于訪問 狀態(tài)的數(shù)據(jù)緩存區(qū)和處于等待狀態(tài)的數(shù)據(jù)緩存區(qū);
所述第二指針管理模塊,用來管理數(shù)據(jù)加載指針指向數(shù)據(jù)緩存模塊 中處于等待狀態(tài)的數(shù)據(jù)緩存區(qū),以使對(duì)所述數(shù)據(jù)緩存模塊進(jìn)行緩存數(shù)據(jù) 的加載。
所述數(shù)據(jù)管理模塊,用來配置不同的需要加載的數(shù)據(jù)源,并把數(shù)據(jù) 加載的指令發(fā)送給第二指針管理模塊。
所述訪問數(shù)據(jù)的請(qǐng)求指令包括查詢、插入、刪除以及更新數(shù)據(jù)的指令。
所述數(shù)據(jù)緩存區(qū)采用哈希表的數(shù)據(jù)結(jié)構(gòu)來緩存數(shù)據(jù)。所述處于訪問狀態(tài)的數(shù)據(jù)緩存區(qū)存儲(chǔ)有數(shù)據(jù),所述處于等待狀態(tài)的 數(shù)據(jù)緩存區(qū)無存儲(chǔ)數(shù)據(jù)。
所述處于訪問狀態(tài)的數(shù)據(jù)緩存區(qū)在訪問結(jié)束之后變?yōu)榈却隣顟B(tài),所 述處于等待狀態(tài)的數(shù)據(jù)緩存區(qū)在加載完數(shù)據(jù)之后變?yōu)樵L問狀態(tài)。
所述哈希表采用關(guān)鍵字為索引值,來查找存儲(chǔ)值。
由上述技術(shù)方案可知,本發(fā)明采用在兩個(gè)數(shù)據(jù)緩存區(qū)來分別進(jìn)行數(shù) 據(jù)的訪問和數(shù)據(jù)加載的操作,從而不必在數(shù)據(jù)重新加載之前先釋放當(dāng)前 使用的內(nèi)存空間,重新申請(qǐng)內(nèi)存空間進(jìn)行數(shù)據(jù)加載,因此能夠在加載數(shù) 據(jù)的同時(shí)訪問數(shù)據(jù),而不影響訪問數(shù)據(jù)的正確性,并且還提高了訪問數(shù) 據(jù)的速度。
通過以下參照附圖對(duì)優(yōu)選實(shí)施例的說明,本發(fā)明的上述以及其它目 的、特征和優(yōu)點(diǎn)將更加明顯。
圖1為本發(fā)明的一種訪問與加載緩存數(shù)據(jù)并發(fā)進(jìn)行的系統(tǒng)的結(jié)構(gòu)示
意圖2是本發(fā)明的一種訪問與加載緩存數(shù)據(jù)并發(fā)進(jìn)行的流程示意圖。
具體實(shí)施例方式
下面將詳細(xì)描述本發(fā)明的具體實(shí)施例。應(yīng)當(dāng)注意,這里描述的實(shí)施 例只用于舉例說明,并不用于限制本發(fā)明。
本發(fā)明的主要構(gòu)思在于使用兩個(gè)數(shù)據(jù)緩存區(qū)來存儲(chǔ)數(shù)據(jù),來解決加 載數(shù)據(jù)與訪問數(shù)據(jù)同時(shí)并行處理的問題。
下面根據(jù)本發(fā)明的一種訪問與加載緩存數(shù)據(jù)并發(fā)進(jìn)行的系統(tǒng)來詳細(xì) 介紹本發(fā)明的上述構(gòu)思。
圖1是本發(fā)明一種實(shí)施例的訪問與加載緩存數(shù)據(jù)并發(fā)進(jìn)行的系統(tǒng)的 結(jié)構(gòu)示意圖,如圖1所示,所述系統(tǒng)包括與數(shù)據(jù)存取模塊,數(shù)據(jù)存取模 塊相連接的第一指針管理模塊,與第一和第二指針管理模塊相連接的數(shù) 據(jù)緩存模塊,與第二指針管理模塊相連接的數(shù)據(jù)管理模塊。
所述數(shù)據(jù)緩存模塊,包括數(shù)據(jù)緩存區(qū)A和數(shù)據(jù)緩存區(qū)B,如圖2所示,用于緩存需要頻繁讀取的數(shù)據(jù),其中兩個(gè)數(shù)據(jù)緩存區(qū)一個(gè)處于等待 狀態(tài),另一個(gè)處于活躍狀態(tài),所述等待狀態(tài)是數(shù)據(jù)緩存區(qū)沒有數(shù)據(jù),所 述活躍狀態(tài)是數(shù)據(jù)緩存區(qū)存儲(chǔ)有數(shù)據(jù),可以進(jìn)行訪問,其中一個(gè)數(shù)據(jù)存
儲(chǔ)區(qū)為等待狀態(tài),則另一個(gè)即為等待。這里所述的數(shù)據(jù)緩存區(qū)采用HASH 表的數(shù)據(jù)結(jié)構(gòu),其中以HASH表為數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中動(dòng)態(tài)的申請(qǐng)連續(xù)的 存儲(chǔ)空間,存儲(chǔ)的數(shù)據(jù)必須滿足key》value模式,即通過key進(jìn)行索引, 找到存儲(chǔ)value的內(nèi)存地址。
所述數(shù)據(jù)存取模塊,用于前端數(shù)據(jù)的存取,獲取并分析客戶端的請(qǐng) 求數(shù)據(jù)包,并把訪問數(shù)據(jù)的請(qǐng)求指令發(fā)給第一指針管理模塊。該數(shù)據(jù)存 取模塊,是緩存服務(wù)器對(duì)客戶端開放的接口,監(jiān)聽Socket,等待網(wǎng)絡(luò)連 接,獲取并分析客戶端的請(qǐng)求數(shù)據(jù)包,作出相應(yīng)的處理,客戶端可以發(fā) 送、査詢、插入、刪除、更新數(shù)據(jù)的請(qǐng)求,對(duì)處于活躍狀態(tài)的hash (哈 希)表進(jìn)行操作。請(qǐng)求數(shù)據(jù)包格式為command、 key、 value、 command是 對(duì)hash表進(jìn)行操作的命令字,包括add、 update 、 delete、 query;其中 key為存于hash表中的數(shù)據(jù)索引值,Value為存于hash表中的數(shù)據(jù)。
所述數(shù)據(jù)管理模塊,用來配置不同的需要加載的數(shù)據(jù)源,并把數(shù)據(jù) 加載的指令發(fā)送給第二指針管理模塊。該數(shù)據(jù)管理模塊根據(jù)配置可對(duì)不 同形式的數(shù)據(jù)源進(jìn)行加載,并通過判斷配置的數(shù)據(jù)超時(shí)時(shí)間,對(duì)數(shù)據(jù)進(jìn) 行重新加載,這里數(shù)據(jù)源可以為數(shù)據(jù)庫、文件、系統(tǒng)管道等。
所述第一指針管理模塊,用來管理指針指向數(shù)據(jù)緩存模塊中處于訪 問狀態(tài)的數(shù)據(jù)緩存區(qū),以使對(duì)所述數(shù)據(jù)緩存模塊進(jìn)行訪問數(shù)據(jù)的存??; 所述第二指針管理模塊,用來管理指針指向數(shù)據(jù)緩存模塊中處于等待狀 態(tài)的數(shù)據(jù)緩存區(qū),以使對(duì)所述數(shù)據(jù)緩存模塊進(jìn)行緩存數(shù)據(jù)的加載。這里 第一和第二指針模塊所管理的指針不是指向數(shù)據(jù)緩存區(qū)A就是數(shù)據(jù)緩存 區(qū)B,如圖2所示,比如說當(dāng)前狀態(tài)數(shù)據(jù)緩存區(qū)A為活躍狀態(tài),數(shù)據(jù)緩 存區(qū)B為等待狀態(tài),當(dāng)通過數(shù)據(jù)存取模塊對(duì)緩存數(shù)據(jù)進(jìn)行操作時(shí),第一 指針管理模塊會(huì)將指針指向當(dāng)前處于活躍狀態(tài)的數(shù)據(jù)緩存區(qū)A,完成數(shù) 據(jù)存取,并且在訪問結(jié)束之后將數(shù)據(jù)緩存區(qū)S的活躍狀態(tài)表為等待狀態(tài), 并釋放A占用的內(nèi)存空間;當(dāng)數(shù)據(jù)管理模塊進(jìn)行數(shù)據(jù)重加載時(shí),第二指 針管理模塊會(huì)將指針指向當(dāng)前處于等待狀態(tài)的數(shù)據(jù)緩存區(qū)B,并且在數(shù)
7據(jù)加載完畢之后將數(shù)據(jù)緩存區(qū)B的等待狀態(tài)變?yōu)榛钴S狀態(tài);這時(shí),數(shù)據(jù) 緩存區(qū)A為等待狀態(tài),數(shù)據(jù)緩存區(qū)B為活躍狀態(tài)。
根據(jù)所述系統(tǒng)的構(gòu)成可知,本發(fā)明采用兩個(gè)數(shù)據(jù)緩存區(qū)來存儲(chǔ)數(shù)據(jù), 其中一個(gè)數(shù)據(jù)緩存區(qū)處于訪問狀態(tài),另外一個(gè)數(shù)據(jù)緩存區(qū)處于等待狀態(tài), 在對(duì)緩存數(shù)據(jù)進(jìn)行加載時(shí),使用第二指針管理模塊管理數(shù)據(jù)加載指針指 向處在等待狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的加載;這時(shí)如果需要對(duì)
緩存數(shù)據(jù)進(jìn)行訪問,則使用第一指針管理模塊管理數(shù)據(jù)訪問指針指向處
在訪問狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的訪問;反之,如果在對(duì)緩存 數(shù)據(jù)進(jìn)行訪問時(shí),需要對(duì)緩存數(shù)據(jù)進(jìn)行加載也可用同樣的方式,即使用 數(shù)據(jù)訪問指針指向處在訪問狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的訪問, 同時(shí)使用數(shù)據(jù)加載指針指向處在等待狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù) 的加載;并且在所述處于訪問狀態(tài)的數(shù)據(jù)緩存區(qū)在訪問結(jié)束之后變?yōu)榈?待狀態(tài),所述處于等待狀態(tài)的數(shù)據(jù)緩存區(qū)在加載完數(shù)據(jù)之后變?yōu)樵L問狀 態(tài)。從而使數(shù)據(jù)訪問和加載同時(shí)進(jìn)行。
雖然已參照幾個(gè)典型實(shí)施例描述了本發(fā)明,但應(yīng)當(dāng)理解,所用的術(shù) 語是說明和示例性、而非限制性的術(shù)語。由于本發(fā)明能夠以多種形式具 體實(shí)施而不脫離發(fā)明的精神或?qū)嵸|(zhì),所以應(yīng)當(dāng)理解,上述實(shí)施例不限于 任何前述的細(xì)節(jié),而應(yīng)在隨附權(quán)利要求所限定的精神和范圍內(nèi)廣泛地解 釋,因此落入權(quán)利要求或其等效范圍內(nèi)的全部變化和改型都應(yīng)為隨附權(quán) 利要求所涵蓋。
權(quán)利要求
1. 一種實(shí)現(xiàn)緩存數(shù)據(jù)訪問與加載并發(fā)進(jìn)行的方法,其特征在于,所述方法包括以下步驟使用兩個(gè)數(shù)據(jù)緩存區(qū)來存儲(chǔ)數(shù)據(jù),所述兩個(gè)數(shù)據(jù)緩存區(qū)中的一個(gè)處于訪問狀態(tài),另外一個(gè)處于等待狀態(tài);使用數(shù)據(jù)加載指針和數(shù)據(jù)訪問指針來進(jìn)行兩個(gè)數(shù)據(jù)緩存區(qū)的指向;在對(duì)緩存數(shù)據(jù)進(jìn)行加載時(shí),使用數(shù)據(jù)加載指針指向處在等待狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的加載;同時(shí)如果需要對(duì)緩存數(shù)據(jù)進(jìn)行訪問,則使用數(shù)據(jù)訪問指針指向處在訪問狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的訪問;或者在對(duì)緩存數(shù)據(jù)進(jìn)行訪問時(shí),使用數(shù)據(jù)訪問指針指向處在訪問狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的訪問;同時(shí)如果需要對(duì)緩存數(shù)據(jù)進(jìn)行加載,使用數(shù)據(jù)加載指針指向處在等待狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的加載;其中所述處于訪問狀態(tài)的數(shù)據(jù)緩存區(qū)在訪問結(jié)束之后變?yōu)榈却隣顟B(tài),所述處于等待狀態(tài)的數(shù)據(jù)緩存區(qū)在加載完數(shù)據(jù)之后變?yōu)樵L問狀態(tài)。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述處于訪問狀態(tài)的數(shù)據(jù) 緩存區(qū)存儲(chǔ)有數(shù)據(jù),所述處于等待狀態(tài)的數(shù)據(jù)緩存區(qū)無存儲(chǔ)數(shù)據(jù)。
3. 根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述數(shù)據(jù)緩存區(qū)采用哈 希表的數(shù)據(jù)結(jié)構(gòu)來緩存數(shù)據(jù)。
4. 根據(jù)權(quán)利要求3所述的系統(tǒng),其特征在于,所述哈希表采用關(guān)鍵 字為索引值,來査找存儲(chǔ)值。
5. —種實(shí)現(xiàn)緩存數(shù)據(jù)訪問與加載并發(fā)進(jìn)行的系統(tǒng),其特征在于,所述系 統(tǒng)包括數(shù)據(jù)存取模塊,與數(shù)據(jù)存取模塊相連接的第一指針管理模塊,與第 一和第二指針管理模塊相連接的數(shù)據(jù)緩存模塊,與第二指針管理模塊相 連接的數(shù)據(jù)管理模塊;其中所述數(shù)據(jù)存取模塊,用來獲取并分析客戶端的請(qǐng)求數(shù)據(jù)包,并 把訪問數(shù)據(jù)的請(qǐng)求指令發(fā)給第-一指針管理模塊;所述第一指針管理模塊,用來管理數(shù)據(jù)訪問指針指向數(shù)據(jù)緩存模塊 中處于訪問狀態(tài)的數(shù)據(jù)緩存區(qū),以使對(duì)所述數(shù)據(jù)緩存模塊進(jìn)行訪問數(shù)據(jù) 的存??;所述數(shù)據(jù)緩存模塊,用來存儲(chǔ)需要頻繁讀取的數(shù)據(jù),包括處于訪問 狀態(tài)的數(shù)據(jù)緩存區(qū)和處于等待狀態(tài)的數(shù)據(jù)緩存區(qū);所述第二指針管理模塊,用來管理數(shù)據(jù)加載指針指向數(shù)據(jù)緩存模塊 中處于等待狀態(tài)的數(shù)據(jù)緩存區(qū),以使對(duì)所述數(shù)據(jù)緩存模塊進(jìn)行緩存數(shù)據(jù)的加載;所述數(shù)據(jù)管理模塊,用來配置不同的需要加載的數(shù)據(jù)源,并把數(shù)據(jù) 加載的指令發(fā)送給第二指針管理模塊。
6. 根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,所述訪問數(shù)據(jù)的請(qǐng)求 指令包括查詢、插入、刪除以及更新數(shù)據(jù)的指令。
7. 根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,所述處于訪問狀態(tài)的 數(shù)據(jù)緩存區(qū)存儲(chǔ)有數(shù)據(jù),所述處于等待狀態(tài)的數(shù)據(jù)緩存區(qū)無存儲(chǔ)數(shù)據(jù)。
8. 根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,所述數(shù)據(jù)緩存區(qū)釆用 哈希表的數(shù)據(jù)結(jié)構(gòu)來緩存數(shù)據(jù)。
9. 根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述哈希表采用關(guān)鍵 字為索引值,來査找存儲(chǔ)值。
全文摘要
本發(fā)明公開了一種實(shí)現(xiàn)緩存數(shù)據(jù)訪問與加載并發(fā)進(jìn)行的方法,所述方法為使用兩個(gè)數(shù)據(jù)緩存區(qū)來存儲(chǔ)數(shù)據(jù),所述兩個(gè)數(shù)據(jù)緩存區(qū)中的一個(gè)處于訪問狀態(tài),另外一個(gè)處于等待狀態(tài);使用數(shù)據(jù)加載指針和數(shù)據(jù)訪問指針來進(jìn)行兩個(gè)數(shù)據(jù)緩存區(qū)的指向;在對(duì)緩存數(shù)據(jù)進(jìn)行加載時(shí),使用數(shù)據(jù)加載指針指向處在等待狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的加載;同時(shí)如果需要對(duì)緩存數(shù)據(jù)進(jìn)行訪問,則使用數(shù)據(jù)訪問指針指向處在訪問狀態(tài)的數(shù)據(jù)緩存區(qū),進(jìn)行緩存數(shù)據(jù)的訪問。根據(jù)本發(fā)明,能夠在加載數(shù)據(jù)的同時(shí)訪問數(shù)據(jù),而不影響訪問數(shù)據(jù)的正確性,并且還提高了訪問數(shù)據(jù)的速度。
文檔編號(hào)H04L12/56GK101459599SQ20081017512
公開日2009年6月17日 申請(qǐng)日期2008年10月30日 優(yōu)先權(quán)日2008年10月30日
發(fā)明者偉 王 申請(qǐng)人:北京閃聯(lián)互動(dòng)網(wǎng)絡(luò)科技有限責(zé)任公司