欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法、裝置及系統(tǒng)的制作方法

文檔序號:6518573閱讀:176來源:國知局
一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法、裝置及系統(tǒng)的制作方法【專利摘要】本發(fā)明提供了一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法、裝置和系統(tǒng),所述方法包括:與客戶端建立通信連接;接收客戶端發(fā)送的數(shù)據(jù)訪問請求;解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索引;根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息;當(dāng)內(nèi)核態(tài)系統(tǒng)緩存有所述數(shù)據(jù)信息時,獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息;將所述數(shù)據(jù)信息利用所述連接套接字所建立的通信連接發(fā)送到客戶端,從內(nèi)核態(tài)的緩存空間獲取客戶端所請求的數(shù)據(jù)信息,在內(nèi)核態(tài)中實(shí)現(xiàn)客戶端的數(shù)據(jù)訪問過程,無需CPU從用戶態(tài)的memcached中獲取數(shù)據(jù)信息經(jīng)由內(nèi)核態(tài)發(fā)送到客戶端,避免了CPU在用戶態(tài)和內(nèi)核態(tài)之間不斷的切換,加快了客戶端訪問數(shù)據(jù)的速度?!緦@f明】—種內(nèi)核態(tài)的數(shù)據(jù)訪問方法、裝置及系統(tǒng)【
技術(shù)領(lǐng)域
】[0001]本發(fā)明涉及互聯(lián)網(wǎng)【
技術(shù)領(lǐng)域
】,特別是涉及一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法、裝置及系統(tǒng)?!?br>背景技術(shù)
】[0002]在互聯(lián)網(wǎng)應(yīng)用中,服務(wù)器中大量的相同的數(shù)據(jù)被多個客戶端反復(fù)訪問,給服務(wù)器中的數(shù)據(jù)庫帶來很大的壓力。為了減輕數(shù)據(jù)庫的負(fù)載,目前主要采用memcached分布式內(nèi)存對象緩存系統(tǒng),將數(shù)據(jù)庫中多次被訪問的數(shù)據(jù)緩存在內(nèi)存中,客戶端通過memcached訪問數(shù)據(jù)庫,當(dāng)memcached中沒有客戶端訪問的數(shù)據(jù)時,memcached從數(shù)據(jù)庫中獲取客戶端所訪問的數(shù)據(jù)發(fā)送到客戶端,并緩存數(shù)據(jù);當(dāng)memcached中有客戶端訪問的數(shù)據(jù)時,客戶端直接從memcached中獲得所訪問的數(shù)據(jù),不再去數(shù)據(jù)庫中訪問所需要的數(shù)據(jù),從而減少了客戶端訪問數(shù)據(jù)庫的次數(shù),減輕了數(shù)據(jù)庫的負(fù)載。[0003]Memcached系統(tǒng)工作在操作系統(tǒng)的用戶態(tài),而操作系統(tǒng)處理客戶端的數(shù)據(jù)訪問請求事件是由操作系統(tǒng)的內(nèi)核態(tài)處理,因此,處理器(CPU)在處理客戶端通過網(wǎng)絡(luò)訪問memcached的數(shù)據(jù)事件時,需要在用戶態(tài)和內(nèi)核態(tài)之間不斷切換,消耗大量的時間,降低服務(wù)器處理客戶端請求的速度。【
發(fā)明內(nèi)容】[0004]有鑒于此,本發(fā)明提供了一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法、裝置及系統(tǒng),從內(nèi)核態(tài)的緩存空間獲取客戶端請求的數(shù)據(jù)信息,無需從用戶態(tài)的memcached中獲取數(shù)據(jù)信息,避免CPU在用戶態(tài)和內(nèi)核態(tài)之間不斷切換。[0005]一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法,應(yīng)用于內(nèi)核態(tài)系統(tǒng),所述方法包括:[0006]與客戶端建立通信連接;[0007]接收客戶端發(fā)送的數(shù)據(jù)訪問請求;[0008]解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索引;[0009]根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息;[0010]當(dāng)內(nèi)核態(tài)系統(tǒng)緩存有所述數(shù)據(jù)信息時,獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息;[0011]將所述數(shù)據(jù)信息利用所建立的通信連接發(fā)送到客戶端。[0012]可選的,所述方法還包括:[0013]利用netlink套接字所建立的通信連接從用戶態(tài)獲取初始化配置參數(shù),所述初始化配置參數(shù)包括監(jiān)聽網(wǎng)絡(luò)地址、監(jiān)聽端口、最大容量和傳輸協(xié)議類型;[0014]根據(jù)所述初始化配置參數(shù)進(jìn)行初始化。[0015]可選的,所述方法還包括:[0016]當(dāng)內(nèi)核態(tài)緩存區(qū)沒有緩存所述數(shù)據(jù)信息時,接收客戶端發(fā)送的所述數(shù)據(jù)信息進(jìn)行緩存,所述數(shù)據(jù)信息為客戶端從數(shù)據(jù)庫獲取的。[0017]可選的,所述接收客戶端發(fā)送的所述數(shù)據(jù)信息進(jìn)行緩存包括:[0018]接收客戶端從數(shù)據(jù)庫獲取的數(shù)據(jù)信息;[0019]根據(jù)所述數(shù)據(jù)信息的長度選擇數(shù)據(jù)緩存接口;[0020]判斷空閑緩存區(qū)域是否小于所述數(shù)據(jù)信息的長度;[0021]當(dāng)空閑緩存區(qū)域不小于所述數(shù)據(jù)信息的長度時,存儲所述數(shù)據(jù)信息;[0022]當(dāng)空閑緩存區(qū)域小于所述數(shù)據(jù)信息的長度時,獲取內(nèi)核緩存空間,存儲所述數(shù)據(jù)信息。[0023]可選的,所述獲取內(nèi)核緩存空間包括:[0024]判斷所請求的內(nèi)核緩存空間是否大于第一預(yù)設(shè)閾值;[0025]當(dāng)所請求的內(nèi)核緩存空間不大于第一預(yù)設(shè)閾值時,通過kmalloc獲取內(nèi)核緩存空間;[0026]當(dāng)請求的內(nèi)核緩存空間大于第一預(yù)設(shè)閾值時,判斷所請求的內(nèi)核緩存空間是否大于第二預(yù)設(shè)閾值;[0027]當(dāng)所請求的內(nèi)核緩存空間大于第二預(yù)設(shè)閾值時,通過alloc_pages獲取內(nèi)核緩存空間;[0028]當(dāng)所請求的內(nèi)核緩存空間不大于第二預(yù)設(shè)閾值時,通過vmalloc獲取內(nèi)核緩存空間。[0029]可選的,所述根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息包括:[0030]根據(jù)所述數(shù)據(jù)索引利用hashtable查找itemlist中的數(shù)據(jù)描述信息指針;[0031]根據(jù)所述數(shù)據(jù)描述指針查找是否緩存有所述數(shù)據(jù)信息。[0032]可選的,所述與客戶端建立通信連接包括:[0033]利用預(yù)先設(shè)置的監(jiān)聽套接字監(jiān)聽與其關(guān)聯(lián)的端口所接收的至少一個客戶端的tcp或unix連接請求;[0034]當(dāng)接收到客戶端的tcp或unix連接請求時,給所述客戶端創(chuàng)建一個連接套接字;[0035]創(chuàng)建與所述客戶端通過所述連接套接字通信的連接對象。[0036]可選的,所述與客戶端建立通信連接包括:[0037]當(dāng)接收到的客戶端的udp請求時,建立客戶端與預(yù)設(shè)UDP連接對象的通信連接。[0038]一種內(nèi)核態(tài)的數(shù)據(jù)訪問裝置,應(yīng)用于內(nèi)核態(tài)系統(tǒng),所述裝置包括:[0039]通信模塊,用于與客戶端建立通信連接;[0040]接收模塊,用于接收客戶端發(fā)送的數(shù)據(jù)訪問請求;[0041]解析模塊,用于解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索引;[0042]數(shù)據(jù)查找模塊,用于根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息;[0043]數(shù)據(jù)獲取模塊,用于當(dāng)內(nèi)核態(tài)系統(tǒng)緩存有所述數(shù)據(jù)信息時,獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息;[0044]數(shù)據(jù)發(fā)送模塊,用于將所述數(shù)據(jù)信息利用所建立的通信連接發(fā)送到客戶端。[0045]可選的,所述裝置還包括:[0046]參數(shù)獲取模塊,用于利用netlink套接字所建立的通信連接從用戶態(tài)獲取初始化配置參數(shù),所述初始化配置參數(shù)包括監(jiān)聽網(wǎng)絡(luò)地址、監(jiān)聽端口、最大容量和傳輸協(xié)議類型;[0047]初始化模塊,用于根據(jù)所述初始化配置參數(shù)進(jìn)行初始化。[0048]可選的,所述裝置還包括:[0049]緩存模塊,用于當(dāng)內(nèi)核態(tài)緩存區(qū)沒有緩存所述數(shù)據(jù)信息時,接收客戶端發(fā)送的所述數(shù)據(jù)信息進(jìn)行緩存,所述數(shù)據(jù)信息為客戶端從數(shù)據(jù)庫獲取的。[0050]可選的,所述緩存模塊包括:[0051]接收單元,用于接收客戶端從數(shù)據(jù)庫獲取的數(shù)據(jù)信息;[0052]選擇接口單元,用于根據(jù)所述數(shù)據(jù)信息的長度選擇數(shù)據(jù)緩存接口;[0053]比較單元,用于判斷空閑緩存區(qū)域是否小于所述數(shù)據(jù)信息的長度;[0054]第一存儲單元,用于當(dāng)空閑緩存區(qū)域不小于所述數(shù)據(jù)信息的長度時,存儲所述數(shù)據(jù)信息;[0055]第二存儲單元,用于當(dāng)空閑緩存區(qū)域小于所述數(shù)據(jù)信息的長度時,獲取內(nèi)核緩存空間,存儲所述數(shù)據(jù)信息。[0056]可選的,所述第二存儲單元包括:[0057]第一判定子單元,用于判斷所請求的內(nèi)核緩存空間是否大于第一預(yù)設(shè)閾值;[0058]第一獲取子單元,用于當(dāng)所請求的內(nèi)核緩存空間不大于第一預(yù)設(shè)閾值時,通過kmalloc獲取內(nèi)核緩存空間;[0059]第二判定子單元,用于當(dāng)請求的內(nèi)核緩存空間大于第一預(yù)設(shè)閾值時,判斷所請求的內(nèi)核緩存空間是否大于第二預(yù)設(shè)閾值;[0060]第二獲取子單元,用于當(dāng)所請求的內(nèi)核緩存空間大于第二預(yù)設(shè)閾值時,通過alloc_pages獲取內(nèi)核緩存空間;[0061]第三獲取子單元,用于當(dāng)所請求的內(nèi)核緩存空間不大于第二預(yù)設(shè)閾值時,通過vmalloc獲取內(nèi)核緩存空間。[0062]可選的,所述數(shù)據(jù)查找模塊包括:[0063]第一查找單元,用于根據(jù)所述數(shù)據(jù)索引利用hashtable查找itemlist中的數(shù)據(jù)描述信息指針;[0064]第二查找單元,用于根據(jù)所述數(shù)據(jù)描述指針查找是否緩存有所述數(shù)據(jù)信息。[0065]可選的,所述通信模塊包括:[0066]監(jiān)聽單元,用于利用預(yù)先設(shè)置的監(jiān)聽套接字監(jiān)聽與其關(guān)聯(lián)的端口所接收的至少一個客戶端的tcp或unix連接請求;[0067]第一創(chuàng)建單元,用于當(dāng)接收到客戶端的tcp或unix連接請求時,給所述客戶端創(chuàng)建一個連接套接字;[0068]第二創(chuàng)建單元,用于創(chuàng)建與所述客戶端通過所述連接套接字通信的連接對象。[0069]可選的,所述通信單元包括:[0070]第三創(chuàng)建單元,用于當(dāng)接收到的客戶端的udp請求時,建立客戶端與預(yù)設(shè)UDP連接對象的通信連接。[0071]一種內(nèi)核態(tài)的數(shù)據(jù)訪問系統(tǒng),所述系統(tǒng)包括:[0072]調(diào)度模塊,用于按照數(shù)據(jù)訪問處理線程調(diào)度系統(tǒng)中其他模塊;[0073]監(jiān)聽隊(duì)列,用于監(jiān)聽客戶端的請求,創(chuàng)建所述客戶端的連接套接字;[0074]處理隊(duì)列,創(chuàng)建與客戶端通過所述連接套接字通信的連接對象,以及建立客戶端與預(yù)設(shè)UDP連接對象的通信連接;[0075]Protocollayer模塊,用于提供客戶端與系統(tǒng)通信的協(xié)議層;[0076]Hashtable模塊,用于根據(jù)所述數(shù)據(jù)索引查找itemlist中的數(shù)據(jù)描述信息指針;[0077]Tiemlist模塊,用于根據(jù)所述數(shù)據(jù)描述指針查找slab中是否緩存有所述數(shù)據(jù)信息;[0078]Slab模塊,用于給數(shù)據(jù)信息分配緩存空間;[0079]Buffermanager模塊,用于根據(jù)所述slab模塊的請求給slab分配內(nèi)存空間。[0080]由上述內(nèi)容可知,本發(fā)明有如下有益效果:[0081]本發(fā)明提供了一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法、裝置和系統(tǒng),所述方法包括:與客戶端建立通信連接;接收客戶端發(fā)送的數(shù)據(jù)訪問請求;解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索引;根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息;當(dāng)內(nèi)核態(tài)系統(tǒng)緩存有所述數(shù)據(jù)信息時,獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息;將所述數(shù)據(jù)信息利用所建立的通信連接發(fā)送到客戶端,從內(nèi)核態(tài)的緩存空間獲取客戶端所請求的數(shù)據(jù)信息,在內(nèi)核態(tài)中實(shí)現(xiàn)客戶端的數(shù)據(jù)訪問過程,無需CPU從用戶態(tài)的memcached中獲取數(shù)據(jù)信息經(jīng)由內(nèi)核態(tài)發(fā)送到客戶端,避免了CPU在用戶態(tài)和內(nèi)核態(tài)之間不斷的切換,加快了客戶端訪問數(shù)據(jù)的速度?!緦@綀D】【附圖說明】[0082]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。[0083]圖1為本發(fā)明一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法實(shí)施例一流程圖;[0084]圖2為本發(fā)明一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法實(shí)施例二流程圖;[0085]圖3為內(nèi)核態(tài)系統(tǒng)kmemcache.ko中的buffermanager提供緩存區(qū)域的機(jī)制;[0086]圖4為本發(fā)明一種內(nèi)核態(tài)的數(shù)據(jù)訪問裝置實(shí)施例三結(jié)構(gòu)示意圖;[0087]圖5為本發(fā)明一種內(nèi)核態(tài)的數(shù)據(jù)訪問裝置實(shí)施例四結(jié)構(gòu)示意圖;[0088]圖6為本發(fā)明第二存儲單元507結(jié)構(gòu)示意圖;[0089]圖7為本發(fā)明一種內(nèi)核態(tài)的數(shù)據(jù)訪問系統(tǒng)實(shí)施例五結(jié)構(gòu)示意圖?!揪唧w實(shí)施方式】[0090]本發(fā)明提供了一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法、裝置及系統(tǒng),內(nèi)核態(tài)中緩存有數(shù)據(jù)庫中客戶端不斷反復(fù)訪問的數(shù)據(jù)信息,在內(nèi)核態(tài)中實(shí)現(xiàn)數(shù)據(jù)訪問,CPU無需在用戶態(tài)和內(nèi)核態(tài)之間不斷切換,加快數(shù)據(jù)訪問的速度。[0091]下面結(jié)合附圖對本發(fā)明具體的實(shí)施方式進(jìn)行詳細(xì)說明。[0092]實(shí)施例一[0093]圖1為本發(fā)明一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法實(shí)施例一流程圖,所述方法包括:[0094]步驟101:與客戶端建立通信連接。[0095]客戶端與內(nèi)核態(tài)系統(tǒng)中的連接對象進(jìn)行通信。[0096]內(nèi)核態(tài)中的kmemcach.ko系統(tǒng)在初始化時,設(shè)置tcp(TransmissionControlProtocol)監(jiān)聽套接字和unix監(jiān)聽套接字。tcp監(jiān)聽套接字用于監(jiān)聽客戶端發(fā)送的tcp連接請求,unix監(jiān)聽套接字用于監(jiān)聽客戶端發(fā)送的unix連接請求。當(dāng)tcp監(jiān)聽套接字監(jiān)聽到客戶端的tcp連接請求或unix監(jiān)聽套接字監(jiān)聽到客戶端的unix的連接請求時,將監(jiān)聽套接字放入監(jiān)聽隊(duì)列,監(jiān)聽隊(duì)列給每一個監(jiān)聽套接字所監(jiān)聽到的客戶端創(chuàng)建一個連接套接字,然后將創(chuàng)建的連接套接字放入處理隊(duì)列,處理隊(duì)列為每一個連接套接字所對應(yīng)的客戶端創(chuàng)建一個連接對象,所述連接對象通過客戶端的連接套接字與客戶端建立通信連接。[0097]當(dāng)接收到客戶端的udp(UserDatagramProtocol)請求時,將客戶端的請求直接發(fā)送到處理隊(duì)列,處理隊(duì)列為每一個客戶端建立客戶端與預(yù)設(shè)UDP連接對象的通信連接。步驟102:接收客戶端發(fā)送的數(shù)據(jù)訪問請求。[0098]內(nèi)核態(tài)中的連接對象接收客戶端的數(shù)據(jù)訪問請求,當(dāng)客戶端發(fā)送的請求為tcp或unix請求時,客戶端的連接對象通過連接套接字接收客戶端的數(shù)據(jù)訪問請求;當(dāng)客戶端發(fā)送的請求為udp請求時,預(yù)設(shè)的UDP連接對象直接從客戶端接收udp數(shù)據(jù)訪問請求。所述數(shù)據(jù)訪問請求攜帶有數(shù)據(jù)信息的數(shù)據(jù)索引,數(shù)據(jù)索引用于描述客戶端所請求的數(shù)據(jù)信息。[0099]步驟103:解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索引。[0100]連接對象解析客戶端發(fā)送的數(shù)據(jù)訪問請求,得到數(shù)據(jù)索引。[0101]步驟104:根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息,如果是,執(zhí)行步驟105;如果否,執(zhí)行步驟107。[0102]連接對象根據(jù)數(shù)據(jù)索引在內(nèi)核態(tài)的緩存空間中查找數(shù)據(jù)信息,當(dāng)查找到客戶端所請求的數(shù)據(jù)信息時,將數(shù)據(jù)信息發(fā)送到客戶端。當(dāng)沒有查找到客戶端所請求的數(shù)據(jù)信息時,向客戶端返回沒有查找到數(shù)據(jù)信息的結(jié)果,客戶端從數(shù)據(jù)庫獲取所要訪問的數(shù)據(jù)信息,并將所述數(shù)據(jù)信息發(fā)送到內(nèi)核態(tài)的緩存空間進(jìn)行緩存,以便下次訪問時,直接從內(nèi)核態(tài)的緩存空間獲取所述數(shù)據(jù)信息。[0103]步驟105:獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息。[0104]步驟106:將所述數(shù)據(jù)信息利用所建立的通信連接發(fā)送到客戶端。[0105]步驟107:接收客戶端發(fā)送的所述數(shù)據(jù)信息進(jìn)行緩存,所述數(shù)據(jù)信息為客戶端從數(shù)據(jù)庫獲取的。[0106]由上述內(nèi)容可知,本發(fā)明有如下有益效果:[0107]與客戶端建立通信連接;接收客戶端發(fā)送的數(shù)據(jù)訪問請求;解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索引;根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息;當(dāng)內(nèi)核態(tài)系統(tǒng)緩存有所述數(shù)據(jù)信息時,獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息;將所述數(shù)據(jù)信息利用所建立的通信連接發(fā)送到客戶端,從內(nèi)核態(tài)的緩存空間獲取客戶端所請求的數(shù)據(jù)信息,在內(nèi)核態(tài)中實(shí)現(xiàn)客戶端的數(shù)據(jù)訪問過程,無需CPU從用戶態(tài)的memcached中獲取數(shù)據(jù)信息經(jīng)由內(nèi)核態(tài)發(fā)送到客戶端,避免了CPU在用戶態(tài)和內(nèi)核態(tài)之間不斷的切換,加快了客戶端訪問數(shù)據(jù)的速度。[0108]實(shí)施例二[0109]圖2為本發(fā)明一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法實(shí)施例二流程圖,與實(shí)施例一相比,還包括對內(nèi)核態(tài)初始化,所述方法包括:[0110]步驟201:利用netlink套接字所建立的通信連接從用戶態(tài)獲取初始化配置參數(shù)。[0111]kmemcache服務(wù)器包括用戶態(tài)系統(tǒng)umemcached以及內(nèi)核態(tài)系統(tǒng)kmemcache.ko。用戶態(tài)系統(tǒng)umemcached主要為內(nèi)核態(tài)系統(tǒng)kmemcache.ko提供初始化所需的初始化配置參數(shù)。所述初始化配置參數(shù)包括監(jiān)聽網(wǎng)絡(luò)地址、監(jiān)聽端口、最大容量和傳輸協(xié)議類型。[0112]用戶在用戶態(tài)系統(tǒng)umemcached中設(shè)置初始化配置參數(shù),用戶態(tài)系統(tǒng)umemcached向內(nèi)核態(tài)系統(tǒng)kmemcache.ko發(fā)送初始化請求事件,kmemcache.ko向netlink注冊回調(diào)函數(shù)kmemcache.ko_bh_init。用戶態(tài)系統(tǒng)umemcached與內(nèi)核態(tài)系統(tǒng)kmemcache.ko通過netIink套接字建立通信連接。[0113]用戶態(tài)系統(tǒng)umemcached將初始化配置參數(shù)通過netlink套接字發(fā)送到內(nèi)核態(tài)系統(tǒng)kmemcache.ko:用戶態(tài)系統(tǒng)umemcached將初始化配置參數(shù)發(fā)送到netlink套接字,netlink套接字調(diào)用內(nèi)核態(tài)系統(tǒng)kmemcache.ko注冊的回調(diào)函數(shù)kmemcache.ko_bh_init發(fā)送初始化配置參數(shù),當(dāng)初始化配置參數(shù)發(fā)送完畢時,netlink套接字調(diào)用complete通知內(nèi)核態(tài)系統(tǒng)kmemcache.ko初始化配置參數(shù)發(fā)送完畢。[0114]步驟202:根據(jù)所述初始化配置參數(shù)進(jìn)行初始化。[0115]內(nèi)核態(tài)系統(tǒng)kmemcache.ko根據(jù)所接收到的初始化配置參數(shù)進(jìn)行初始化,設(shè)置kmemcache.ko系統(tǒng)中監(jiān)聽套接字所監(jiān)聽的網(wǎng)絡(luò)地址及端口,設(shè)置kmemcache.ko系統(tǒng)中緩存數(shù)據(jù)信息的最大容量,設(shè)置kmemcache.ko系統(tǒng)與客戶端的傳輸協(xié)議類型。[0116]步驟203:與客戶端建立通信連接。[0117]kmemcache.ko系統(tǒng)中的監(jiān)聽隊(duì)列和處理隊(duì)列處理客戶端的數(shù)據(jù)訪問請求。kmemcache.ko系統(tǒng)初始化時設(shè)置了tcp監(jiān)聽套接字和unix監(jiān)聽套接字。[0118]內(nèi)核態(tài)系統(tǒng)kmemcache.ko利用預(yù)先設(shè)置的監(jiān)聽套接字監(jiān)聽與其關(guān)聯(lián)的端口所接收的至少一個客戶端的tcp或unix連接請求;當(dāng)接收到客戶端的tcp或unix連接請求時,給所述客戶端創(chuàng)建一個連接套接字;創(chuàng)建與所述客戶端通過所述連接套接字通信的連接對象。[0119]內(nèi)核態(tài)系統(tǒng)kmemcache.ko接收到客戶端的tcp或unix連接請求時,將tcp或unix監(jiān)聽套接字放入監(jiān)聽隊(duì)列,監(jiān)聽隊(duì)列給客戶端創(chuàng)建一個連接套接字,并將連接套接字發(fā)送到處理隊(duì)列,處理隊(duì)列給客戶端創(chuàng)建一個連接對象,所述連接對象與所述客戶端通過連接套接字進(jìn)行通信。[0120]當(dāng)接收到客戶端的udp(UserDatagramProtocol)請求時,將客戶端的請求直接發(fā)送到處理隊(duì)列,處理隊(duì)列為每一個客戶端建立客戶端與預(yù)設(shè)UDP連接對象的通信連接。連接對象與客戶端的通信采用protocollayer所提供的文本和二進(jìn)制的通信協(xié)議。[0121]步驟204:接收客戶端發(fā)送的數(shù)據(jù)訪問請求。[0122]步驟205:解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索引。[0123]步驟204與步驟205與實(shí)施例一類似,參考實(shí)施例一的描述,這里不再贅述。[0124]步驟206:根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息,如果是,執(zhí)行步驟207;如果否,執(zhí)行步驟209。[0125]可選的,所述根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息包括:[0126]根據(jù)所述數(shù)據(jù)索引利用hashtable查找itemlist中的數(shù)據(jù)描述信息指針;[0127]根據(jù)所述數(shù)據(jù)描述指針查找是否緩存有所述數(shù)據(jù)信息。[0128]在內(nèi)核態(tài)中實(shí)現(xiàn)基于用戶態(tài)的memcached系統(tǒng)設(shè)計的hashtable,將itemlist的數(shù)據(jù)描述信息的指針保存在hashtable的哈希表中,并啟用一個內(nèi)核線程處理對hashtable的哈希表的擴(kuò)容。[0129]在內(nèi)核態(tài)中實(shí)現(xiàn)基于用戶態(tài)的memcached系統(tǒng)設(shè)計的itemlist,實(shí)現(xiàn)對數(shù)據(jù)描述信息的存儲。[0130]內(nèi)核態(tài)系統(tǒng)kmemcache.ko根據(jù)所解析得到的數(shù)據(jù)索引利用hashtable查找itemlist中的數(shù)據(jù)描述信息指針,再根據(jù)所述數(shù)據(jù)描述信息指針利用itemlist從slab中查找數(shù)據(jù)信息。[0131]步驟207:獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息。[0132]步驟208:將所述數(shù)據(jù)信息利用所建立的通信連接發(fā)送到客戶端。[0133]當(dāng)內(nèi)核態(tài)系統(tǒng)kmemcache.ko在其緩存空間中查找到客戶端所請求的數(shù)據(jù)信息時,獲取所述數(shù)據(jù)信息,將所述數(shù)據(jù)信息發(fā)送到客戶端。[0134]步驟209:接收客戶端從數(shù)據(jù)庫獲取的數(shù)據(jù)信息。[0135]當(dāng)內(nèi)核態(tài)系統(tǒng)kmemcache.ko沒有從其緩存空間中查找到客戶端所請求的數(shù)據(jù)信息時,客戶端向數(shù)據(jù)庫請求所述數(shù)據(jù)信息,并將所述數(shù)據(jù)信息發(fā)送到內(nèi)核態(tài)系統(tǒng)kmemcache.ko的緩存空間進(jìn)行緩存。[0136]步驟210:根據(jù)所述數(shù)據(jù)信息的長度選擇數(shù)據(jù)緩存接口。[0137]內(nèi)核態(tài)系統(tǒng)kmemcache.ko根據(jù)所接收到的數(shù)據(jù)信息的長度選擇slab中的數(shù)據(jù)緩存接口。在內(nèi)核態(tài)系統(tǒng)kmemcache.ko中實(shí)現(xiàn)slab內(nèi)存分配機(jī)制,slab給提供了多種內(nèi)存接口,內(nèi)核態(tài)系統(tǒng)kmemcache.ko可以根據(jù)實(shí)際需要選擇slab中的數(shù)據(jù)緩存接口。[0138]舉例說明:slab給內(nèi)核態(tài)系統(tǒng)kmemcache.ko提供了三種數(shù)據(jù)緩存接口,lk,IG和10G,當(dāng)客戶端發(fā)送到內(nèi)核態(tài)系統(tǒng)kmemcache.ko的數(shù)據(jù)信息的長度小于Ik時,選擇slab中Ik的數(shù)據(jù)緩存接口;當(dāng)客戶端發(fā)送到內(nèi)核態(tài)系統(tǒng)kmemcache.ko的數(shù)據(jù)信息的長度大于Ik小于IG時,選擇slab中IG的數(shù)據(jù)緩存接口;當(dāng)客戶端發(fā)送到內(nèi)核態(tài)系統(tǒng)kmemcache.ko的數(shù)據(jù)信息的長度大于IG小于10G時,選擇slab中10G的數(shù)據(jù)緩存接口。[0139]步驟211:判斷空閑緩存區(qū)域是否小于所述數(shù)據(jù)信息的長度,如果否,執(zhí)行步驟212;如果是,執(zhí)行步驟213。[0140]步驟212:存儲所述數(shù)據(jù)信息。[0141]當(dāng)slab能提供的緩存區(qū)域大于數(shù)據(jù)信息的長度時,直接存儲所述數(shù)據(jù)信息。[0142]步驟213:獲取內(nèi)核緩存空間,存儲所述數(shù)據(jù)信息。[0143]當(dāng)slab能提供的緩存區(qū)域小于數(shù)據(jù)信息的長度時,slab從buffermanager中獲取緩存區(qū)域。在內(nèi)核態(tài)系統(tǒng)kmemcache.ko的底層實(shí)現(xiàn)buffermanager分配子系統(tǒng),buffermanager盡量減少內(nèi)核態(tài)系統(tǒng)的頁間和頁內(nèi)碎片,給slab提供緩存區(qū)域。[0144]可選的,圖3所不的是內(nèi)核態(tài)系統(tǒng)kmemcache.ko中的buffermanager依據(jù)slab的請求提供緩存區(qū)域的機(jī)制:[0145]步驟301:判斷所請求的內(nèi)核緩存空間是否大于第一預(yù)設(shè)閾值,如果否,執(zhí)行步驟302;如果是,執(zhí)行步驟303。[0146]當(dāng)內(nèi)核態(tài)系統(tǒng)kmemcache.ko中的slab向buffermanager請求內(nèi)核緩存時,buffermanager判斷所請求的內(nèi)核緩存空間是否大于第一預(yù)設(shè)閾值,第一預(yù)設(shè)閾值是kmallc內(nèi)存分配接口可以分配的最大內(nèi)核緩存空間。[0147]步驟302:通過kmalloc獲取內(nèi)核緩存空間。[0148]當(dāng)slab所請求的內(nèi)核緩存空間小于或等于第一預(yù)設(shè)閾值時,buffermanager通過kmalloc內(nèi)存分配接口給slab分配內(nèi)核緩存空間。[0149]步驟303:判斷所請求的內(nèi)核緩存空間是否大于第二預(yù)設(shè)閾值,如果是,執(zhí)行步驟304;如果否,執(zhí)行步驟305。[0150]當(dāng)slab所請求的內(nèi)核緩存空間大于第一預(yù)設(shè)閾值時,判斷slab所請求的內(nèi)核緩存空間是否大于第二預(yù)設(shè)閾值,第二預(yù)設(shè)閾值是vmalloc內(nèi)存分配接口可以分配的最大內(nèi)核緩存空間。[0151]步驟304:通過alloc_pages獲取內(nèi)核緩存空間。[0152]當(dāng)slab所請求的內(nèi)核緩存空間大于第二預(yù)設(shè)閾值時,buffermanager通過alloc_pages內(nèi)存分配接口給slab分配內(nèi)核緩存空間,若alloc_pages內(nèi)存分配接口分配失敗,貝1J采用vmalloc內(nèi)存分配接口給slab分配內(nèi)核緩存空間。[0153]步驟305:通過vmalloc獲取內(nèi)核緩存空間。[0154]當(dāng)slab所請求的內(nèi)核緩存空間不大于第二預(yù)設(shè)閾值時,buffermanager通過vmalloc內(nèi)存分配接口給slab分配內(nèi)核緩存空間。[0155]實(shí)施例三[0156]圖4為本發(fā)明一種內(nèi)核態(tài)的數(shù)據(jù)訪問裝置實(shí)施例三結(jié)構(gòu)示意圖,是與實(shí)施例一中所述的方法所對應(yīng)的裝置,所述裝置包括:[0157]通信模塊401,用于與客戶端建立通信連接。[0158]接收模塊402,用于接收客戶端發(fā)送的數(shù)據(jù)訪問請求。[0159]解析模塊403,用于解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索引。[0160]數(shù)據(jù)查找模塊404,用于根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息,如果是,進(jìn)入數(shù)據(jù)獲取模塊405;如果否,進(jìn)入緩存模塊407。[0161]數(shù)據(jù)獲取模塊405,用于獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息。[0162]數(shù)據(jù)發(fā)送模塊406,用于將所述數(shù)據(jù)信息利用所建立的通信連接發(fā)送到客戶端。[0163]緩存模塊407,用于當(dāng)內(nèi)核態(tài)緩存區(qū)沒有緩存所述數(shù)據(jù)信息時,接收客戶端發(fā)送的所述數(shù)據(jù)信息進(jìn)行緩存,所述數(shù)據(jù)信息為客戶端從數(shù)據(jù)庫獲取的。[0164]實(shí)施例三與實(shí)施例一的描述類似,參考實(shí)施例一的描述,這里不再贅述。[0165]實(shí)施例四[0166]圖5為本發(fā)明一種內(nèi)核態(tài)的數(shù)據(jù)訪問裝置實(shí)施例四結(jié)構(gòu)示意圖,是與實(shí)施例二中所述的方法所對應(yīng)的裝置,所述裝置包括:[0167]參數(shù)獲取模塊501,用于利用netlink套接字所建立的通信連接從用戶態(tài)獲取初始化配置參數(shù),所述初始化配置參數(shù)包括監(jiān)聽網(wǎng)絡(luò)地址、監(jiān)聽端口、最大容量和傳輸協(xié)議類型。[0168]初始化模塊502,用于根據(jù)所述初始化配置參數(shù)進(jìn)行初始化。[0169]通信模塊401,用于與客戶端建立通信連接。[0170]可選的,所述通信模塊401包括:[0171]監(jiān)聽單元,用于利用預(yù)先設(shè)置的監(jiān)聽套接字監(jiān)聽與其關(guān)聯(lián)的端口所接收的至少一個客戶端的tcp或unix連接請求;[0172]第一創(chuàng)建單元,用于當(dāng)接收到客戶端的tcp或unix連接請求時,給所述客戶端創(chuàng)建一個連接套接字;[0173]第二創(chuàng)建單元,用于創(chuàng)建與所述客戶端通過所述連接套接字通信的連接對象。[0174]可選的,所述通信模塊401包括:[0175]第三創(chuàng)建單元,用于當(dāng)接收到的客戶端的udp請求時,建立客戶端與預(yù)設(shè)UDP連接對象的通信連接。。[0176]接收模塊402,用于接收客戶端發(fā)送的數(shù)據(jù)訪問請求。[0177]解析模塊403,用于解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索弓I。[0178]數(shù)據(jù)查找模塊404,用于根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息,如果是,進(jìn)入數(shù)據(jù)獲取模塊405;如果否,進(jìn)入接收單元503。[0179]數(shù)據(jù)獲取模塊405,用于獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息。[0180]數(shù)據(jù)發(fā)送模塊406,用于將所述數(shù)據(jù)信息利用所建立的通信連接發(fā)送到客戶端。[0181]接收單元503,用于接收客戶端從數(shù)據(jù)庫獲取的數(shù)據(jù)信息;[0182]選擇接口單元504,用于根據(jù)所述數(shù)據(jù)信息的長度選擇數(shù)據(jù)緩存接口;[0183]比較單元505,用于判斷空閑緩存區(qū)域是否小于所述數(shù)據(jù)信息的長度,如果否,進(jìn)入第一存儲單元506;如果是,進(jìn)入第二存儲單元507。[0184]第一存儲單元506,用于當(dāng)空閑緩存區(qū)域不小于所述數(shù)據(jù)信息的長度時,存儲所述數(shù)據(jù)信息。[0185]第二存儲單元507,用于當(dāng)空閑緩存區(qū)域小于所述數(shù)據(jù)信息的長度時,獲取內(nèi)核緩存空間,存儲所述數(shù)據(jù)信息。[0186]可選的,圖6為所述第二存儲單元507結(jié)構(gòu)示意圖,包括:[0187]第一判定子單元601,用于判斷所請求的內(nèi)核緩存空間是否大于第一預(yù)設(shè)閾值,如果否,進(jìn)入第一獲取子單元602;如果是,進(jìn)入第二判定子單元603。[0188]第一獲取子單元602,用于通過kmalloc獲取內(nèi)核緩存空間。[0189]第二判定子單元603,用于判斷所請求的內(nèi)核緩存空間是否大于第二預(yù)設(shè)閾值,如果是,進(jìn)入第二獲取子單元604;如果否,進(jìn)入第三獲取子單元605。[0190]第二獲取子單元604,用于當(dāng)所請求的內(nèi)核緩存空間大于第二預(yù)設(shè)閾值時,通過alloc_pages獲取內(nèi)核緩存空間。[0191]第三獲取子單元605,用于當(dāng)所請求的內(nèi)核緩存空間不大于第二預(yù)設(shè)閾值時,通過vmalloc獲取內(nèi)核緩存空間。[0192]實(shí)施例五[0193]圖7為本發(fā)明一種內(nèi)核態(tài)的數(shù)據(jù)訪問系統(tǒng)實(shí)施例五結(jié)構(gòu)示意圖,所述系統(tǒng)包括:[0194]調(diào)度模塊701,用于按照數(shù)據(jù)訪問處理線程調(diào)度系統(tǒng)中其他模塊。[0195]監(jiān)聽隊(duì)列702,用于監(jiān)聽客戶端的請求,創(chuàng)建所述客戶端的連接套接字。[0196]處理隊(duì)列703,創(chuàng)建與客戶端通過所述連接套接字通信的連接對象,以及建立客戶端與預(yù)設(shè)UDP連接對象的通信連接。[0197]Protocollayer模塊704,用于提供客戶端與系統(tǒng)通信的協(xié)議層。[0198]Hashtable模塊705,用于根據(jù)所述數(shù)據(jù)索引查找itemlist中的數(shù)據(jù)描述信息指針。[0199]Tiemlist模塊706,用于根據(jù)所述數(shù)據(jù)描述指針查找slab中是否緩存有所述數(shù)據(jù)信息。[0200]Slab模塊707,用于給數(shù)據(jù)信息分配緩存空間。[0201]Buffermanager模塊708,用于根據(jù)所述slab模塊的請求給slab分配內(nèi)存空間。[0202]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。【權(quán)利要求】1.一種內(nèi)核態(tài)的數(shù)據(jù)訪問方法,其特征在于,應(yīng)用于內(nèi)核態(tài)系統(tǒng),所述方法包括:與客戶端建立通信連接;接收客戶端發(fā)送的數(shù)據(jù)訪問請求;解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索引;根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息;當(dāng)內(nèi)核態(tài)系統(tǒng)緩存有所述數(shù)據(jù)信息時,獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息;將所述數(shù)據(jù)信息利用所建立的通信連接發(fā)送到客戶端。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括:利用netlink套接字所建立的通信連接從用戶態(tài)獲取初始化配置參數(shù),所述初始化配置參數(shù)包括監(jiān)聽網(wǎng)絡(luò)地址、監(jiān)聽端口、最大容量和傳輸協(xié)議類型;根據(jù)所述初始化配置參數(shù)進(jìn)行初始化。3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括:當(dāng)內(nèi)核態(tài)緩存區(qū)沒有緩存所述數(shù)據(jù)信息時,接收客戶端發(fā)送的所述數(shù)據(jù)信息進(jìn)行緩存,所述數(shù)據(jù)信息為客戶端從數(shù)據(jù)庫獲取的。4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述接收客戶端發(fā)送的所述數(shù)據(jù)信息進(jìn)行緩存包括:接收客戶端從數(shù)據(jù)庫獲取的數(shù)據(jù)信息;根據(jù)所述數(shù)據(jù)信息的長度選擇數(shù)據(jù)緩存接口;判斷空閑緩存區(qū)域是否小于所述數(shù)據(jù)信息的長度;當(dāng)空閑緩存區(qū)域不小于所述數(shù)據(jù)信息的長度時,存儲所述數(shù)據(jù)信息;當(dāng)空閑緩存區(qū)域小于所述數(shù)據(jù)信息的長度時,獲取內(nèi)核緩存空間,存儲所述數(shù)據(jù)信息。5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述獲取內(nèi)核緩存空間包括:判斷所請求的內(nèi)核緩存空間是否大于第一預(yù)設(shè)閾值;當(dāng)所請求的內(nèi)核緩存空間不大于第一預(yù)設(shè)閾值時,通過kmalloc獲取內(nèi)核緩存空間;當(dāng)請求的內(nèi)核緩存空間大于第一預(yù)設(shè)閾值時,判斷所請求的內(nèi)核緩存空間是否大于第二預(yù)設(shè)閾值;當(dāng)所請求的內(nèi)核緩存空間大于第二預(yù)設(shè)閾值時,通過alloc_pages獲取內(nèi)核緩存空間;當(dāng)所請求的內(nèi)核緩存空間不大于第二預(yù)設(shè)閾值時,通過vmalloc獲取內(nèi)核緩存空間。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息包括:根據(jù)所述數(shù)據(jù)索引利用hashtable查找itemlist中的數(shù)據(jù)描述信息指針;根據(jù)所述數(shù)據(jù)描述指針查找是否緩存有所述數(shù)據(jù)信息。7.根據(jù)權(quán)利要求1-6任意一項(xiàng)所述的方法,其特征在于,所述與客戶端建立通信連接包括:利用預(yù)先設(shè)置的監(jiān)聽套接字監(jiān)聽與其關(guān)聯(lián)的端口所接收的至少一個客戶端的tcp或unix連接請求;當(dāng)接收到客戶端的tcp或unix連接請求時,給所述客戶端創(chuàng)建一個連接套接字;創(chuàng)建與所述客戶端通過所述連接套接字通信的連接對象。8.根據(jù)權(quán)利要求1-6任意一項(xiàng)所述的方法,其特征在于,所述與客戶端建立通信連接包括:當(dāng)接收到的客戶端的udp請求時,建立客戶端與預(yù)設(shè)UDP連接對象的通信連接。9.一種內(nèi)核態(tài)的數(shù)據(jù)訪問裝置,其特征在于,應(yīng)用于內(nèi)核態(tài)系統(tǒng),所述裝置包括:通信模塊,用于與客戶端建立通信連接;接收模塊,用于接收客戶端發(fā)送的數(shù)據(jù)訪問請求;解析模塊,用于解析所述數(shù)據(jù)訪問請求獲得數(shù)據(jù)索引;數(shù)據(jù)查找模塊,用于根據(jù)所述數(shù)據(jù)索引判斷內(nèi)核態(tài)緩存區(qū)是否緩存有所述數(shù)據(jù)信息;數(shù)據(jù)獲取模塊,用于當(dāng)內(nèi)核態(tài)系統(tǒng)緩存有所述數(shù)據(jù)信息時,獲取所述數(shù)據(jù)索引所對應(yīng)的數(shù)據(jù)信息;數(shù)據(jù)發(fā)送模塊,用于將所述數(shù)據(jù)信息利用所建立的通信連接發(fā)送到客戶端。10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述裝置還包括:參數(shù)獲取模塊,用于利用netlink套接字所建立的通信連接從用戶態(tài)獲取初始化配置參數(shù),所述初始化配置參數(shù)包括監(jiān)聽網(wǎng)絡(luò)地址、監(jiān)聽端口、最大容量和傳輸協(xié)議類型;初始化模塊,用于根據(jù)所述初始化配置參數(shù)進(jìn)行初始化。11.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述裝置還包括:緩存模塊,用于當(dāng)內(nèi)核態(tài)緩存區(qū)沒有緩存所述數(shù)據(jù)信息時,接收客戶端發(fā)送的所述數(shù)據(jù)信息進(jìn)行緩存,所述數(shù)據(jù)信息為客戶端從數(shù)據(jù)庫獲取的。12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述緩存模塊包括:接收單元,用于接收客戶端從數(shù)據(jù)庫獲取的數(shù)據(jù)信息;選擇接口單元,用于根據(jù)所述數(shù)據(jù)信息的長度選擇數(shù)據(jù)緩存接口;比較單元,用于判斷空閑緩存區(qū)域是否小于所述數(shù)據(jù)信息的長度;第一存儲單元,用于當(dāng)空閑緩存區(qū)域不小于所述數(shù)據(jù)信息的長度時,存儲所述數(shù)據(jù)信息;第二存儲單元,用于當(dāng)空閑緩存區(qū)域小于所述數(shù)據(jù)信息的長度時,獲取內(nèi)核緩存空間,存儲所述數(shù)據(jù)信息。13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述第二存儲單元包括:第一判定子單元,用于判斷所請求的內(nèi)核緩存空間是否大于第一預(yù)設(shè)閾值;第一獲取子單元,用于當(dāng)所請求的內(nèi)核緩存空間不大于第一預(yù)設(shè)閾值時,通過kmalloc獲取內(nèi)核緩存空間;第二判定子單元,用于當(dāng)請求的內(nèi)核緩存空間大于第一預(yù)設(shè)閾值時,判斷所請求的內(nèi)核緩存空間是否大于第二預(yù)設(shè)閾值;第二獲取子單元,用于當(dāng)所請求的內(nèi)核緩存空間大于第二預(yù)設(shè)閾值時,通過alloc_pages獲取內(nèi)核緩存空間;第三獲取子單元,用于當(dāng)所請求的內(nèi)核緩存空間不大于第二預(yù)設(shè)閾值時,通過vmalloc獲取內(nèi)核緩存空間。14.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述數(shù)據(jù)查找模塊包括:第一查找單元,用于根據(jù)所述數(shù)據(jù)索引利用hashtable查找itemlist中的數(shù)據(jù)描述信息指針;第二查找單元,用于根據(jù)所述數(shù)據(jù)描述指針查找是否緩存有所述數(shù)據(jù)信息。15.根據(jù)權(quán)利要求9-14任意一項(xiàng)所述的裝置,其特征在于,所述通信模塊包括:監(jiān)聽單元,用于利用預(yù)先設(shè)置的監(jiān)聽套接字監(jiān)聽與其關(guān)聯(lián)的端口所接收的至少一個客戶端的tcp或unix連接請求;第一創(chuàng)建單元,用于當(dāng)接收到客戶端的tcp或unix連接請求時,給所述客戶端創(chuàng)建一個連接套接字;第二創(chuàng)建單元,用于創(chuàng)建與所述客戶端通過所述連接套接字通信的連接對象。16.根據(jù)權(quán)利要求9-14任意一項(xiàng)所述的裝置,其特征在于,所述通信單元包括:第三創(chuàng)建單元,用于當(dāng)接收到的客戶端的udp請求時,建立客戶端與預(yù)設(shè)UDP連接對象的通信連接。17.一種內(nèi)核態(tài)的數(shù)據(jù)訪問系統(tǒng),其特征在于,所述系統(tǒng)包括:調(diào)度模塊,用于按照數(shù)據(jù)訪問處理線程調(diào)度系統(tǒng)中其他模塊;監(jiān)聽隊(duì)列,用于監(jiān)聽客戶端的請求,創(chuàng)建所述客戶端的連接套接字;處理隊(duì)列,創(chuàng)建與客戶端通過所述連接套接字通信的連接對象,以及建立客戶端與預(yù)設(shè)Μ)Ρ連接對象的通信連接;Protocollayer模塊,用于提供客戶端與系統(tǒng)通信的協(xié)議層;Hashtable模塊,用于根據(jù)所述數(shù)據(jù)索引查找itemlist中的數(shù)據(jù)描述信息指針;Tiemlist模塊,用于根據(jù)所述數(shù)據(jù)描述指針查找slab中是否緩存有所述數(shù)據(jù)信息;Slab模塊,用于給數(shù)據(jù)信息分配緩存空間;Buffermanager模塊,用于根據(jù)所述slab模塊的請求給slab分配內(nèi)存空間?!疚臋n編號】G06F12/08GK103544324SQ201310557075【公開日】2014年1月29日申請日期:2013年11月11日優(yōu)先權(quán)日:2013年11月11日【發(fā)明者】李建國申請人:北京搜狐新媒體信息技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
巍山| 阳城县| 海盐县| 建阳市| 永靖县| 武平县| 宜兰县| 铜梁县| 买车| 湖北省| 特克斯县| 逊克县| 鄢陵县| 小金县| 若羌县| 北安市| 广河县| 福鼎市| 碌曲县| 南安市| 涿鹿县| 广州市| 翼城县| 波密县| 唐海县| 金溪县| 鹤庆县| 平利县| 北辰区| 北京市| 大兴区| 隆子县| 昭苏县| 平原县| 霍邱县| 密云县| 开原市| 平武县| 五台县| 杭锦后旗| 酒泉市|