數(shù)據(jù)存儲方法及裝置的制造方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)存儲方法及裝置,屬于數(shù)據(jù)處理技術(shù)領(lǐng)域。所述方法包括:創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,內(nèi)存緩存中的數(shù)據(jù)單元以雙向鏈表的方式進行存儲;判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量;若雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量,將雙向鏈表中最后一個數(shù)據(jù)單元刪除,最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù)據(jù)單元;將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最前面的位置。在雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,通過將雙向鏈表中最后一個數(shù)據(jù)單元刪除,即刪除最近使用次數(shù)最少的數(shù)據(jù)單元,以為可能被訪問多次的數(shù)據(jù)單元留下存儲空間。因此,內(nèi)存緩存的利用率較高。
【專利說明】
數(shù)據(jù)存儲方法及裝置
技術(shù)領(lǐng)域
[0001] 本發(fā)明設(shè)及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別設(shè)及一種數(shù)據(jù)存儲方法及裝置。
【背景技術(shù)】
[0002] 隨著科技的快速發(fā)展,使用終端處理數(shù)據(jù)的用戶越來越多。終端在對數(shù)據(jù)處理前, 通常需要在內(nèi)存緩存中對數(shù)據(jù)進行存儲。例如,終端在接收到服務器發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)時,通 常會將接收到的網(wǎng)絡(luò)數(shù)據(jù)在內(nèi)存緩存中進行存儲,W便于后續(xù)快速讀取網(wǎng)絡(luò)數(shù)據(jù)。由于內(nèi) 存緩存的大小有限,內(nèi)存緩存中數(shù)據(jù)存儲的方式影響著內(nèi)存緩存的利用率,而內(nèi)存緩存的 利用率影響著讀寫數(shù)據(jù)的性能。因此,如何對數(shù)據(jù)進行存儲是提高讀寫數(shù)據(jù)性能的關(guān)鍵。
[0003] 相關(guān)技術(shù)中提供了一種數(shù)據(jù)存儲方法,在該方法中,創(chuàng)建待加入內(nèi)存緩存中的數(shù) 據(jù)單元,數(shù)據(jù)單元中包括待處理的信息,如文本或圖片信息等。若內(nèi)存緩存被占滿,則隨機 刪除內(nèi)存緩存中已保存的數(shù)據(jù)單元W釋放存儲空間,從而在留出存儲空間后,在內(nèi)存緩存 中保存新創(chuàng)建的數(shù)據(jù)單元。
[0004] 在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)上述方法至少存在W下問題:
[0005] 由于當內(nèi)存緩存被占滿時,會隨機刪除數(shù)據(jù)單元,從而使得內(nèi)存緩存中可能會被 多次訪問的數(shù)據(jù)單元被刪除后,需重新創(chuàng)建該數(shù)據(jù)單元并保存。因此,內(nèi)存緩存的利用率較 低。
【發(fā)明內(nèi)容】
[0006] 為了解決相關(guān)技術(shù)的問題,本發(fā)明實施例提供了一種數(shù)據(jù)存儲方法及裝置,所述 技術(shù)方案如下:
[0007] -方面,提供了一種數(shù)據(jù)存儲方法,所述方法包括:
[0008] 創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,所述內(nèi)存緩存中的數(shù)據(jù)單元W雙向鏈表的方 式進行存儲;
[0009] 判斷所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量;
[0010] 若所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量,將所述雙向鏈表中最后一個 數(shù)據(jù)單元刪除,所述最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù)據(jù)單元;
[0011] 將創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置。
[0012] 另一方面,提供了一種數(shù)據(jù)存儲裝置,所述裝置包括:
[0013] 創(chuàng)建模塊,用于創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,所述內(nèi)存緩存中的數(shù)據(jù)單元 W雙向鏈表的方式進行存儲;
[0014] 第一判斷模塊,用于判斷所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量;
[0015] 第一刪除模塊,用于當所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,將所 述雙向鏈表中最后一個數(shù)據(jù)單元刪除,所述最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù) 據(jù)單元;
[0016] 存儲模塊,用于將創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置。
[0017] 本發(fā)明實施例提供的技術(shù)方案帶來的有益效果是:
[0018] 通過判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量,并在雙向鏈表中的數(shù) 據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,將雙向鏈表中最后一個數(shù)據(jù)單元刪除,即刪除最近使用次 數(shù)最少的數(shù)據(jù)單元,從而將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最前面的位置,為可能被訪問 多次的數(shù)據(jù)單元留下存儲空間。因此,內(nèi)存緩存的利用率較高。
【附圖說明】
[0019] 為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使 用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于 本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可W根據(jù)運些附圖獲得其他 的附圖。
[0020] 圖1是本發(fā)明一實施例示出的一種數(shù)據(jù)存儲方法流程圖;
[0021] 圖2是本發(fā)明另一實施例示出的一種數(shù)據(jù)存儲方法流程圖;
[0022] 圖3是本發(fā)明另一實施例示出的一種數(shù)據(jù)單元的結(jié)構(gòu)示意圖;
[0023] 圖4是本發(fā)明另一實施例不出的一種雙向鏈表的結(jié)構(gòu)不意圖;
[0024] 圖5是本發(fā)明另一實施例示出的一種數(shù)據(jù)存儲裝置的結(jié)構(gòu)示意圖;
[00巧]圖6是本發(fā)明另一實施例示出的一種數(shù)據(jù)存儲裝置的結(jié)構(gòu)示意圖;
[00%]圖7是本發(fā)明另一實施例示出的一種數(shù)據(jù)存儲裝置的結(jié)構(gòu)示意圖;
[0027] 圖8是本發(fā)明另一實施例示出的一種數(shù)據(jù)存儲裝置的結(jié)構(gòu)示意圖;
[0028] 圖9是本發(fā)明另一實施例示出的一種數(shù)據(jù)存儲裝置的結(jié)構(gòu)示意圖;
[0029] 圖10是本發(fā)明另一實施例示出的一種數(shù)據(jù)存儲裝置的結(jié)構(gòu)示意圖;
[0030] 圖11是本發(fā)明另一實施例示出的一種終端的結(jié)構(gòu)示意圖。
【具體實施方式】
[0031] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方 式作進一步地詳細描述。
[0032] 由于相關(guān)技術(shù)中在存儲數(shù)據(jù)時,若內(nèi)存緩存被占滿,會隨機刪除內(nèi)存緩存中已保 存的數(shù)據(jù)單元W釋放存儲空間,從而在留出存儲空間后,在內(nèi)存緩存中保存新創(chuàng)建的數(shù)據(jù) 單元,從而使得內(nèi)存緩存中可能會被多次訪問的數(shù)據(jù)單元被刪除后,需重新創(chuàng)建該數(shù)據(jù)單 元并保存。因此,內(nèi)存緩存的利用率較低。
[0033] 為了預防上述情況,提高內(nèi)存緩存的利用率,本發(fā)明實施例提供了一種數(shù)據(jù)存儲 方法,參見圖1,本實施例提供的方法流程包括:
[0034] 101、創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,內(nèi)存緩存中的數(shù)據(jù)單元W雙向鏈表的方 式進行存儲。
[0035] 102、判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量。
[0036] 103、若雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量,將雙向鏈表中最后一個數(shù)據(jù) 單元刪除,最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù)據(jù)單元。
[0037] 104、將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最前面的位置。
[0038] 本發(fā)明實施例提供的方法,通過判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè) 數(shù)量,并在雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,將雙向鏈表中最后一個數(shù)據(jù)單 元刪除,即刪除最近使用次數(shù)最少的數(shù)據(jù)單元,從而將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最 前面的位置,為可能被訪問多次的數(shù)據(jù)單元留下存儲空間。因此,內(nèi)存緩存的利用率較高。
[0039] 作為一種可選實施例,將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最前面的位置之前,還 包括: W40] 判斷創(chuàng)建的數(shù)據(jù)單元占用的存儲空間是否大于第一預設(shè)闊值;
[0041] 若創(chuàng)建的數(shù)據(jù)單元占用的存儲空間不大于第一預設(shè)闊值,則執(zhí)行將創(chuàng)建的數(shù)據(jù)單 元存儲至雙向鏈表最前面的位置的步驟。
[0042] 作為一種可選實施例,該方法還包括:
[0043] 每隔預設(shè)周期檢測雙向鏈表占用的存儲空間;
[0044] 若雙向鏈表占用的存儲空間大于第二預設(shè)闊值,按照從后往前的順序,對雙向鏈 表中的數(shù)據(jù)單元進行刪除,直到雙向鏈表占用的存儲空間不大于第Ξ預設(shè)闊值,第Ξ預設(shè) 闊值小于第二預設(shè)闊值。
[0045] 作為一種可選實施例,將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最前面的位置之后,還 包括:
[0046] 根據(jù)創(chuàng)建的數(shù)據(jù)單元,生成創(chuàng)建的數(shù)據(jù)單元的序列號;
[0047] 根據(jù)創(chuàng)建的數(shù)據(jù)單元在內(nèi)存緩存中的存儲地址,定義對應的引用;
[0048] 建立創(chuàng)建的數(shù)據(jù)單元的序列號及引用之間的映射關(guān)系,得到索引信息; W例將索引信息保存至索引信息表中。
[0050] 作為一種可選實施例,該方法還包括:
[0051] 獲取數(shù)據(jù)訪問請求,數(shù)據(jù)訪問請求中至少包含序列號; 陽0巧根據(jù)數(shù)據(jù)訪問請求中的序列號,在索引信息表中進行查詢,得到對應的引用;
[005引根據(jù)查詢到的引用,訪問雙向鏈表中對應的數(shù)據(jù)單元。
[0054] 作為一種可選實施例,該方法還包括: 陽化5] 當檢測到雙向鏈表中的任一數(shù)據(jù)單元被訪問時,將任一數(shù)據(jù)單元移動至雙向鏈表 最前面的位置。
[0056] 上述所有可選技術(shù)方案,可W采用任意結(jié)合形成本發(fā)明的可選實施例,在此不再 --寶述。
[0057] 本發(fā)明實施例提供了一種數(shù)據(jù)存儲方法,參見圖2,本實施例提供的方法流程包 括:
[005引 201、創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,內(nèi)存緩存中的數(shù)據(jù)單元W雙向鏈表的方 式進行存儲。
[0059] 由于內(nèi)存緩存中的數(shù)據(jù)單元W雙向鏈表的方式進行存儲,因此,在創(chuàng)建待加入內(nèi) 存緩存中的數(shù)據(jù)單元時,可按照雙向鏈表中節(jié)點的結(jié)構(gòu),創(chuàng)建數(shù)據(jù)單元,本實施例對此不作 具體限定。
[0060] 雙向鏈表中的節(jié)點可包括但不限于由網(wǎng)絡(luò)數(shù)據(jù)、前向數(shù)據(jù)引用及后向數(shù)據(jù)引用組 成,本實施例對此不作具體限定。其中,雙向鏈表中每個節(jié)點為一個數(shù)據(jù)單元。數(shù)據(jù)單元中 的前向數(shù)據(jù)引用用于指向雙向鏈表中該數(shù)據(jù)單元的前一個數(shù)據(jù)單元,數(shù)據(jù)單元中的后向數(shù) 據(jù)引用用于指向雙向鏈表中該數(shù)據(jù)單元的后一個數(shù)據(jù)單元,網(wǎng)絡(luò)數(shù)據(jù)可W為從網(wǎng)絡(luò)服務器 中獲取的文本信息或圖片鏈接等,本實施例不對網(wǎng)絡(luò)數(shù)據(jù)的內(nèi)容作具體限定。
[0061] 需要說明的是,本步驟201中的數(shù)據(jù)引用記錄的是數(shù)據(jù)單元在內(nèi)存緩存中的存儲 地址,用于指向數(shù)據(jù)單元。在創(chuàng)建的數(shù)據(jù)單元中的前向數(shù)據(jù)引用,所記錄的是雙向鏈表中該 創(chuàng)建的數(shù)據(jù)單元的前一個數(shù)據(jù)單元在內(nèi)存緩存中的存儲地址。在創(chuàng)建的數(shù)據(jù)單元中的后向 數(shù)據(jù)引用,所記錄的是雙向鏈表中該創(chuàng)建的數(shù)據(jù)單元的后一個數(shù)據(jù)單元在內(nèi)存緩存中的存 儲地址。
[0062] 例如,數(shù)據(jù)單元可W為如圖3所示的結(jié)構(gòu),數(shù)據(jù)單元構(gòu)成的雙向鏈表可為如圖4所 示的結(jié)構(gòu)。
[0063] 202、判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量。
[0064] 在判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量之前,可預先設(shè)置用于統(tǒng) 計雙向鏈表中的數(shù)據(jù)單元個數(shù)的變量,將該變量初始值設(shè)置為0。當檢測到數(shù)據(jù)單元加入雙 向鏈表時,將該變量的值加1。本實施例不對判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預 設(shè)數(shù)量的方式作具體限定,包括但不限于:將該變量與預設(shè)數(shù)量比較;若該變量的值不小 于預設(shè)數(shù)量,則確定雙向鏈表中數(shù)據(jù)單元的個數(shù)達到了預設(shè)數(shù)量;反之,則確定雙向鏈表中 數(shù)據(jù)單元的個數(shù)未達到預設(shè)數(shù)量。其中,預設(shè)數(shù)量對應的數(shù)值可根據(jù)需求進行設(shè)置,本實施 例對此不作具體限定。 W65] 由于內(nèi)存緩存中的存儲空間通常有限,而數(shù)據(jù)單元占用的存儲空間通常維持在一 個固定范圍之內(nèi)。當占用存儲空間較大的數(shù)據(jù)單元存儲至內(nèi)存緩存中時,內(nèi)存緩存中相對 留給其它數(shù)據(jù)單元的存儲空間也就變少了,而占用存儲空間較大的數(shù)據(jù)單元被訪問的次數(shù) 通常較少,進而導致內(nèi)存緩存中存儲空間的利用率較低。因此,為了提高內(nèi)存緩存中存儲空 間的利用率,在將創(chuàng)建的數(shù)據(jù)單元添加至雙向鏈表最前面的位置之前,還可W判斷創(chuàng)建的 數(shù)據(jù)單元占用的存儲空間是否大于第一預設(shè)闊值。若創(chuàng)建的數(shù)據(jù)單元占用的存儲空間不大 于第一預設(shè)闊值,則執(zhí)行將創(chuàng)建的數(shù)據(jù)單元添加至雙向鏈表最前面的位置的步驟。其中,第 一預設(shè)闊值可根據(jù)需求進行設(shè)置,本實施例對此不作具體限定。根據(jù)經(jīng)驗,可將第一預設(shè)闊 值設(shè)置為64邸化iloB5rte,千字節(jié))。
[0066] 203、若雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量,將雙向鏈表中最后一個數(shù)據(jù) 單元刪除,最后一個數(shù)據(jù)單元為最近使用次數(shù)最少的數(shù)據(jù)單元。
[0067] 由于雙向鏈表中數(shù)據(jù)單元的前向數(shù)據(jù)引用指向該數(shù)據(jù)單元的前一個數(shù)據(jù)單元,后 向數(shù)據(jù)引用指向該數(shù)據(jù)單元的后一個數(shù)據(jù)單元,而雙向鏈表中的第一個數(shù)據(jù)單元由于前面 沒有其它的數(shù)據(jù)單元,第一個數(shù)據(jù)單元中的前向數(shù)據(jù)引用為空,不指向任何數(shù)據(jù)單元。同 理,雙向鏈表中的最后一個數(shù)據(jù)單元由于后續(xù)沒有其它的數(shù)據(jù)單元,則最后一個數(shù)據(jù)單元 中的后向數(shù)據(jù)引用為空,不指向任何數(shù)據(jù)單元。因此,為了便于對雙向鏈表進行操作,可在 雙向鏈表中創(chuàng)建一個表頭及表尾,本實施例對此不作具體限定。其中,表頭及表尾可與數(shù)據(jù) 單元具有相同的數(shù)據(jù)結(jié)構(gòu),添加表頭及表尾的雙向鏈表可如圖4所示。
[0068] W上述內(nèi)容為基礎(chǔ),本實施例不對將雙向鏈表中最后一個數(shù)據(jù)單元刪除的方式作 具體限定,包括但不限于:將表尾的前向數(shù)據(jù)引用指向雙向鏈表中最后一個數(shù)據(jù)單元的前 一個數(shù)據(jù)單元,將雙向鏈表中最后一個數(shù)據(jù)單元的前一個數(shù)據(jù)單元的后向數(shù)據(jù)引用指向表 尾;釋放最后一個數(shù)據(jù)單元的存儲空間。
[0069] 需要說明的是,由于后續(xù)需對雙向鏈表中的數(shù)據(jù)單元進行訪問,而在一次訪問過 程中,本次被訪問的數(shù)據(jù)單元有很大概率在后續(xù)訪問過程中,繼續(xù)被訪問。因此,當檢測 到雙向鏈表中的任一數(shù)據(jù)單元被訪問時,可將該任一數(shù)據(jù)單元移動至雙向鏈表最前面的位 置,本實施例對此不作具體限定。通過上述對數(shù)據(jù)單元在雙向鏈表中的位置調(diào)動過程,最 近被訪問次數(shù)較少的數(shù)據(jù)單元會處于雙向鏈表中靠后的位置,最近被訪問次數(shù)較多的數(shù)據(jù) 單元會處于雙向鏈表中靠前的位。即被訪問概率低的數(shù)據(jù)單元會處于雙向鏈表中靠后的位 置,被訪問概率高的數(shù)據(jù)單元會處于雙向鏈表中靠前的位置,從而通過數(shù)據(jù)單元在雙向鏈 表中的位置,能夠有效區(qū)分哪些數(shù)據(jù)單元是訪問概率高的數(shù)據(jù)單元,哪些數(shù)據(jù)單元是訪問 概率低的數(shù)據(jù)單元。其中,雙向鏈表中的最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù)據(jù) 單元,也為被訪問概率最低的數(shù)據(jù)單元。
[0070] 通過上述刪除過程,能夠避免被訪問概率高的數(shù)據(jù)單元被刪除,從而重新創(chuàng)建該 數(shù)據(jù)單元并保存的過程。在提高內(nèi)存緩存利用率的同時,還提高了訪問雙向鏈表中數(shù)據(jù)單 元的速度。 陽071] 204、將創(chuàng)建的數(shù)據(jù)單元添加至雙向鏈表最前面的位置。
[0072] W上述步驟203中的內(nèi)容為基礎(chǔ),本實施例不對將創(chuàng)建的數(shù)據(jù)單元添加至雙向鏈 表最前面的位置的方式作具體限定,包括但不限于:將當前雙向鏈表中的表頭后面的數(shù)據(jù) 單元的前向數(shù)據(jù)引用指向創(chuàng)建的數(shù)據(jù)單元,將創(chuàng)建的數(shù)據(jù)單元的后向數(shù)據(jù)引用指向當前雙 向鏈表中的表頭后面的數(shù)據(jù)單元,將表頭的后向數(shù)據(jù)引用指向創(chuàng)建的數(shù)據(jù)單元,將創(chuàng)建的 數(shù)據(jù)單元的前向數(shù)據(jù)引用指向表頭。
[0073] 另外,由于上述步驟201至204是在雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量 的條件下,在雙向鏈表添加數(shù)據(jù)單元的過程。而在實際操作過程中,在雙向鏈表中添加數(shù)據(jù) 單元時,雙向鏈表中的數(shù)據(jù)單元的個數(shù)可能還沒有達到預設(shè)數(shù)量。此時,可直接將創(chuàng)建的數(shù) 據(jù)單元存儲至雙向鏈表最前面的位置,本實施例對此不作具體限定。其中,存儲方式可參考 本步驟204中的過程,此處不再寶述。
[0074] 需要說明的是,由于內(nèi)存緩存中的存儲空間有限,當內(nèi)存緩存中存儲的數(shù)據(jù)占用 的存儲空間達到一定值時,可能會影響內(nèi)存緩存的性能。因此,為了避免內(nèi)存緩存被占用太 多,可每隔預設(shè)周期檢測雙向鏈表占用的存儲空間,若雙向鏈表占用的存儲空間大于第二 預設(shè)闊值,按照從后往前的順序,對雙向鏈表中的數(shù)據(jù)單元進行刪除,直到雙向鏈表占用的 存儲空間不大于第Ξ預設(shè)闊值,本實施例對此不作具體限定。其中,第Ξ預設(shè)闊值小于第二 預設(shè)闊值,預設(shè)周期可根據(jù)需求進行設(shè)定,本實施例對此不作具體限定。例如,可將預設(shè)周 期設(shè)置為10秒。
[0075] 例如,W雙向鏈表中存儲了 10個數(shù)據(jù)單元,W從后往前的順序,第一個數(shù)據(jù)單元 至第十個數(shù)據(jù)單元占用的存儲空間分別為60邸、62邸、63邸、6化B、55邸、58邸、59邸、54邸、 57邸、60邸為例。根據(jù)每個數(shù)據(jù)單元占用的存儲空間,可得到雙向鏈表占用的總存儲空間為 589邸。
[0076] 若第二預設(shè)闊值為650邸,由于雙向鏈表占用的存儲空間不大于第二預設(shè)闊值,因 此,可不用對雙向鏈表中的數(shù)據(jù)單元進行刪除。
[0077] 若第二預設(shè)闊值為512邸,由于雙向鏈表占用的存儲空間大于第二預設(shè)闊值,因 此,可對雙向鏈表中的數(shù)據(jù)單元進行刪除。根據(jù)上述步驟203可知,被訪問概率低的數(shù)據(jù)單 元位于雙向鏈表中靠后的位置。因此,在刪除數(shù)據(jù)單元時,可按照從后往前的順序,對數(shù)據(jù) 單元進行刪除。在本例中,可先刪除占用存儲空間為60邸的最后一個數(shù)據(jù)單元。在刪除最 后一個數(shù)據(jù)單元后,雙向鏈表占用的存儲空間為巧89-60) = 529邸。
[007引若第Ξ預設(shè)闊值為128邸,由于刪除數(shù)據(jù)單元后,雙向鏈表占用的存儲空間還是大 于128KB。因此,可繼續(xù)按照從后往前的順序,對數(shù)據(jù)單元進行刪除,直到刪除至第二個數(shù)據(jù) 單元。由于刪除至第二個數(shù)據(jù)單元時,雙向鏈表占用的存儲空間為122邸,小于第Ξ預設(shè)闊 值128KB,從而可停止對數(shù)據(jù)單元進行刪除,并繼續(xù)執(zhí)行存儲或訪問數(shù)據(jù)單元等步驟。
[0079] 需要的說明的是,除了上述步驟201至204中的數(shù)據(jù)存儲過程之外,由于實際操作 中,可能還需要對內(nèi)存緩存中的數(shù)據(jù)進行訪問。為了便于對內(nèi)存緩存中的數(shù)據(jù)進行訪問,在 將創(chuàng)建的數(shù)據(jù)單元添加至雙向鏈表最前面的位置之后,還可執(zhí)行如下步驟。
[0080] 205、根據(jù)創(chuàng)建的數(shù)據(jù)單元,生成創(chuàng)建的數(shù)據(jù)單元的序列號。
[0081] 本實施例不對根據(jù)創(chuàng)建的數(shù)據(jù)單元,生成創(chuàng)建的數(shù)據(jù)單元的序列號的方式作具體 限定,包括但不限于:按照MD5 (Message Digest Algorithm,消息摘要算法第五版)對創(chuàng)建 的數(shù)據(jù)單元對應的數(shù)據(jù)進行計算,得到創(chuàng)建的數(shù)據(jù)單元的序列號。
[0082] 206、根據(jù)創(chuàng)建的數(shù)據(jù)單元在內(nèi)存緩存中的存儲地址,定義對應的引用。
[0083] 由于后續(xù)需訪問內(nèi)存緩存中的數(shù)據(jù)單元,而通過數(shù)據(jù)單元在內(nèi)存緩存中的存儲地 址,就可W對數(shù)據(jù)單元進行訪問。因此,可根據(jù)創(chuàng)建的數(shù)據(jù)單元在內(nèi)存緩存中的存儲地址, 定義對應的引用,通過引用將數(shù)據(jù)單元在內(nèi)存緩存中的存儲地址記錄下來。當然,還可W通 過指針記錄數(shù)據(jù)單元在內(nèi)存緩存中的存儲地址,本實施例對此不作具體限定。
[0084] 需要說明的是,本步驟206中定義的引用記錄的是創(chuàng)建的數(shù)據(jù)單元在內(nèi)存緩存中 的存儲地址,用于指向創(chuàng)建的數(shù)據(jù)單元。而在創(chuàng)建的數(shù)據(jù)單元中的前向數(shù)據(jù)引用,所記錄 的是創(chuàng)建的數(shù)據(jù)單元在雙向鏈表中的前一個數(shù)據(jù)單元,在內(nèi)存緩存中的存儲地址。在創(chuàng)建 的數(shù)據(jù)單元中的后向數(shù)據(jù)引用,所記錄的是創(chuàng)建的數(shù)據(jù)單元在雙向鏈表中的后一個數(shù)據(jù)單 元,在內(nèi)存緩存中的存儲地址。
[00化]207、建立創(chuàng)建的數(shù)據(jù)單元的序列號及引用之間的映射關(guān)系,得到索引信息。
[0086] 通過上述步驟206及步驟207,在得到創(chuàng)建的數(shù)據(jù)單元的序列號及引用后,可W表 項的形式建立序列號及引用之間的映射關(guān)系,得到索引信息。例如,得到索引信息可如下表 1所示:
[0087] 表 1
[0088]
[0089] 其中,左邊為創(chuàng)建的單元的序列號,右邊為創(chuàng)建的數(shù)據(jù)單元的引用。
[0090] 208、將索引信息保存至索引信息表中。
[0091] 通過上述步驟207,在得到創(chuàng)建的數(shù)據(jù)單元對應的索引信息后,可將索引信息保存 至索引信息表。其中,索引信息表可如下表2所示:
[0092] 表 2
[0093]
[0094] W上述內(nèi)容為基礎(chǔ),本實施例還提供了一種數(shù)據(jù)訪問方法,包括但不限于:獲取數(shù) 據(jù)訪問請求,數(shù)據(jù)訪問請求中至少包含序列號;根據(jù)數(shù)據(jù)訪問請求中的序列號,在索引信息 表中進行查詢,得到對應的引用;根據(jù)查詢到的引用,訪問雙向鏈表中對應的數(shù)據(jù)單元。 陽0巧]例如,若數(shù)據(jù)訪問請求中的序列號為65flclfe6f417ec4,通過查詢表2,可得到對 應的引用為化inter_l。由于引用記錄了數(shù)據(jù)單元在內(nèi)存緩存中的存儲地址,因此,根據(jù)引 用化inter_l,即可對內(nèi)存緩存中對應的數(shù)據(jù)單元進行訪問。
[0096] 需要說明的是,當檢測到雙向鏈表中的任一數(shù)據(jù)單元被訪問時,由于本次被訪問 的數(shù)據(jù)單元是最近被訪問的數(shù)據(jù)單元。因此,可將任一數(shù)據(jù)單元移動至雙向鏈表最前面的 位置,本實施例對此不作具體限定。在本次訪問過程結(jié)束后,可將引用化inter_l對應的數(shù) 據(jù)單元移動至雙向鏈表最前面的位置。
[0097] 本發(fā)明實施例提供的方法,通過判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè) 數(shù)量,并在雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,將雙向鏈表中最后一個數(shù)據(jù)單 元刪除,即刪除最近使用次數(shù)最少的數(shù)據(jù)單元,從而將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最 前面的位置,為可能被訪問多次的數(shù)據(jù)單元留下存儲空間。因此,內(nèi)存緩存的利用率較高。
[0098] 本發(fā)明實施例提供了一種數(shù)據(jù)存儲裝置,該裝置用于執(zhí)行上述實施例提供的數(shù)據(jù) 存儲方法。參見圖5,該裝置包括:
[0099] 創(chuàng)建模塊501,用于創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,內(nèi)存緩存中的數(shù)據(jù)單元W 雙向鏈表的方式進行存儲;
[0100] 第一判斷模塊502,用于判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量; 陽101] 第一刪除模塊503,用于當雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,將雙向 鏈表中最后一個數(shù)據(jù)單元刪除,最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù)據(jù)單元; 陽102] 存儲模塊504,用于將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最前面的位置。 陽103] 作為一種可選實施例,參見圖6,該裝置還包括:
[0104] 第二判斷模塊505,用于判斷創(chuàng)建的數(shù)據(jù)單元占用的存儲空間是否大于第一預設(shè) 闊值;
[0105] 添加模塊504,用于當創(chuàng)建的數(shù)據(jù)單元占用的存儲空間不大于第一預設(shè)闊值時,貝U 執(zhí)行將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最前面的位置的步驟。 陽106] 作為一種可選實施例,參見圖7,該裝置還包括:
[0107] 檢測模塊506,用于每隔預設(shè)周期檢測雙向鏈表占用的存儲空間;
[0108] 第二刪除模塊507,用于當雙向鏈表占用的存儲空間大于第二預設(shè)闊值時,按照從 后往前的順序,對雙向鏈表中的數(shù)據(jù)單元進行刪除,直到雙向鏈表占用的存儲空間不大于 第Ξ預設(shè)闊值,第Ξ預設(shè)闊值小于第二預設(shè)闊值。
[0109] 作為一種可選實施例,參見圖8,該裝置還包括:
[0110] 生成模塊508,用于根據(jù)創(chuàng)建的數(shù)據(jù)單元,生成創(chuàng)建的數(shù)據(jù)單元的序列號; 陽111] 定義模塊509,用于根據(jù)創(chuàng)建的數(shù)據(jù)單元在內(nèi)存緩存中的存儲地址,定義對應的引 用;
[0112] 建立模塊510,用于建立創(chuàng)建的數(shù)據(jù)單元的序列號及引用之間的映射關(guān)系,得到索 引?胃息;
[0113] 保存模塊511,用于將索引信息保存至索引信息表中。
[0114] 作為一種可選實施例,參見圖9,該裝置還包括:
[0115] 獲取模塊512,用于獲取數(shù)據(jù)訪問請求,數(shù)據(jù)訪問請求中至少包含序列號;
[0116] 查詢模塊513,用于根據(jù)數(shù)據(jù)訪問請求中的序列號,在索引信息表中進行查詢,得 到對應的引用;
[0117] 訪問模塊514,用于根據(jù)查詢到的引用,訪問雙向鏈表中對應的數(shù)據(jù)單元。
[0118] 作為一種可選實施例,參見圖10,該裝置還包括:
[0119] 移動模塊515,用于當檢測到雙向鏈表中的任一數(shù)據(jù)單元被訪問時,將任一數(shù)據(jù)單 元移動至雙向鏈表最前面的位置。
[0120] 本發(fā)明實施例提供的裝置,通過判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè) 數(shù)量,并在雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,將雙向鏈表中最后一個數(shù)據(jù)單 元刪除,即刪除最近使用次數(shù)最少的數(shù)據(jù)單元,從而將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最 前面的位置,為可能被訪問多次的數(shù)據(jù)單元留下存儲空間。因此,內(nèi)存緩存的利用率較高。 陽121] 本實施例提供了一種終端,該終端可W用于執(zhí)行上述各個實施例中提供的數(shù)據(jù)存 儲方法。參見圖11,該終端1100包括:
[0122] 終端1100可W包括RF(Radio化equen巧,射頻)電路110、包括有一個或一個W上 計算機可讀存儲介質(zhì)的存儲器120、輸入單元130、顯示單元140、傳感器150、音頻電路160、 WiFi (Wireless Fidelity,無線保真)模塊170、包括有一個或者一個W上處理核屯、的處理 器180、W及電源190等部件。本領(lǐng)域技術(shù)人員可W理解,圖11中示出的終端結(jié)構(gòu)并不構(gòu)成 對終端的限定,可W包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布 置。其中:
[0123] RF電路110可用于收發(fā)信息或通話過程中,信號的接收和發(fā)送,特別地,將基站 的下行信息接收后,交由一個或者一個W上處理器180處理;另外,將設(shè)及上行的數(shù)據(jù)發(fā) 送給基站。通常,RF電路110包括但不限于天線、至少一個放大器、調(diào)諧器、一個或多個 振蕩器、用戶身份模塊(SIM)卡、收發(fā)信機、禪合器、LNA化OW Noise Amplifier,低噪聲放 大器)、雙工器等。此外,RF電路110還可W通過無線通信與網(wǎng)絡(luò)和其他設(shè)備通信。所述 無線通信可W使用任一通信標準或協(xié)議,包括但不限于GSM(Global System of Mobile communication,全球移動通訊系統(tǒng))、GPRS(General Packet Radio Service,通用分組 無線服務)、CDMA (Code Division Multiple Access,碼分多址)、WCDMA (Wideband Code Division Multiple Access,寬帶碼分多址)、LTE(X〇ng Term Evolution,長期演進)、電 子郵件、SMS (化ort Messaging Service,短消息服務)等。
[0124] 存儲器120可用于存儲軟件程序W及模塊,處理器180通過運行存儲在存儲器120 的軟件程序W及模塊,從而執(zhí)行各種功能應用W及數(shù)據(jù)處理。存儲器120可主要包括存儲 程序區(qū)和存儲數(shù)據(jù)區(qū),其中,存儲程序區(qū)可存儲操作系統(tǒng)、至少一個功能所需的應用程序 (比如聲音播放功能、圖像播放功能等)等;存儲數(shù)據(jù)區(qū)可存儲根據(jù)終端1100的使用所創(chuàng) 建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話本等)等。此外,存儲器120可W包括高速隨機存取存儲器, 還可W包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他易失性固態(tài)存 儲器件。相應地,存儲器120還可W包括存儲器控制器,W提供處理器180和輸入單元130 對存儲器120的訪問。
[01巧]輸入單元130可用于接收輸入的數(shù)字或字符信息,W及產(chǎn)生與用戶設(shè)置W及功能 控制有關(guān)的鍵盤、鼠標、操作桿、光學或者軌跡球信號輸入。具體地,輸入單元130可包括觸 敏表面131 W及其他輸入設(shè)備132。觸敏表面131,也稱為觸摸顯示屏或者觸控板,可收集 用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸敏 表面131上或在觸敏表面131附近的操作),并根據(jù)預先設(shè)定的程式驅(qū)動相應的連接裝置。 可選的,觸敏表面131可包括觸摸檢測裝置和觸摸控制器兩個部分。其中,觸摸檢測裝置檢 測用戶的觸摸方位,并檢測觸摸操作帶來的信號,將信號傳送給觸摸控制器;觸摸控制器從 觸摸檢測裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點坐標,再送給處理器180,并能接收處理 器180發(fā)來的命令并加 W執(zhí)行。此外,可W采用電阻式、電容式、紅外線W及表面聲波等多 種類型實現(xiàn)觸敏表面131。除了觸敏表面131,輸入單元130還可W包括其他輸入設(shè)備132。 具體地,其他輸入設(shè)備132可W包括但不限于物理鍵盤、功能鍵(比如音量控制按鍵、開關(guān) 按鍵等)、軌跡球、鼠標、操作桿等中的一種或多種。 陽126] 顯示單元140可用于顯示由用戶輸入的信息或提供給用戶的信息W及終端1100 的各種圖形用戶接口,運些圖形用戶接口可W由圖形、文本、圖標、視頻和其任意組合來構(gòu) 成。顯示單元140可包括顯示面板141,可選的,可W采用LCD化iquid化ystal Display, 液晶顯示器)、〇LED (化ganic Li曲t-Emitting Diode,有機發(fā)光二極管)等形式來配置顯 示面板141。進一步的,觸敏表面131可覆蓋顯示面板141,當觸敏表面131檢測到在其上 或附近的觸摸操作后,傳送給處理器180 W確定觸摸事件的類型,隨后處理器180根據(jù)觸摸 事件的類型在顯示面板141上提供相應的視覺輸出。雖然在圖11中,觸敏表面131與顯示 面板141是作為兩個獨立的部件來實現(xiàn)輸入和輸入功能,但是在某些實施例中,可W將觸 敏表面131與顯示面板141集成而實現(xiàn)輸入和輸出功能。 陽127] 終端1100還可包括至少一種傳感器150,比如光傳感器、運動傳感器W及其他傳 感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán) 境光線的明暗來調(diào)節(jié)顯示面板141的亮度,接近傳感器可在終端1100移動到耳邊時,關(guān)閉 顯示面板141和/或背光。作為運動傳感器的一種,重力加速度傳感器可檢測各個方向上 (一般為Ξ軸)加速度的大小,靜止時可檢測出重力的大小及方向,可用于識別手機姿態(tài)的 應用(比如橫豎屏切換、相關(guān)游戲、磁力計姿態(tài)校準)、振動識別相關(guān)功能(比如計步器、敲 擊)等;至于終端1100還可配置的巧螺儀、氣壓計、濕度計、溫度計、紅外線傳感器等其他傳 感器,在此不再寶述。 陽12引音頻電路160、揚聲器161,傳聲器162可提供用戶與終端1100之間的音頻接口。 音頻電路160可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號,傳輸?shù)綋P聲器161,由揚聲器161轉(zhuǎn) 換為聲音信號輸出;另一方面,傳聲器162將收集的聲音信號轉(zhuǎn)換為電信號,由音頻電路 160接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器180處理后,經(jīng)RF電路110 W發(fā)送給 比如另一終端,或者將音頻數(shù)據(jù)輸出至存儲器120 W便進一步處理。音頻電路160還可能 包括耳塞插孔,W提供外設(shè)耳機與終端1100的通信。
[0129] WiFi屬于短距離無線傳輸技術(shù),終端1100通過WiFi模塊170可W幫助用戶收發(fā) 電子郵件、瀏覽網(wǎng)頁和訪問流式媒體等,它為用戶提供了無線的寬帶互聯(lián)網(wǎng)訪問。雖然圖11 示出了 WiFi模塊170,但是可W理解的是,其并不屬于終端1100的必須構(gòu)成,完全可W根據(jù) 需要在不改變發(fā)明的本質(zhì)的范圍內(nèi)而省略。 陽130] 處理器180是終端1100的控制中心利用各種接口和線路連接整個手機的各個部 分,通過運行或執(zhí)行存儲在存儲器120內(nèi)的軟件程序和/或模塊,W及調(diào)用存儲在存儲器 120內(nèi)的數(shù)據(jù),執(zhí)行終端1100的各種功能和處理數(shù)據(jù),從而對手機進行整體監(jiān)控。可選的, 處理器180可包括一個或多個處理核屯、;優(yōu)選的,處理器180可集成應用處理器和調(diào)制解調(diào) 處理器,其中,應用處理器主要處理操作系統(tǒng)、用戶界面和應用程序等,調(diào)制解調(diào)處理器主 要處理無線通信??蒞理解的是,上述調(diào)制解調(diào)處理器也可W不集成到處理器180中。 陽131] 終端1100還包括給各個部件供電的電源190(比如電池),優(yōu)選的,電源可W通過 電源管理系統(tǒng)與處理器180邏輯相連,從而通過電源管理系統(tǒng)實現(xiàn)管理充電、放電、W及功 耗管理等功能。電源190還可W包括一個或一個W上的直流或交流電源、再充電系統(tǒng)、電源 故障檢測電路、電源轉(zhuǎn)換器或者逆變器、電源狀態(tài)指示器等任意組件。 陽132] 盡管未示出,終端1100還可W包括攝像頭、藍牙模塊等,在此不再寶述。具體在本 實施例中,終端的顯示單元是觸摸屏顯示器,終端還包括有存儲器,W及一個或者一個W上 的程序,其中一個或者一個W上程序存儲于存儲器中,且經(jīng)配置W由一個或者一個W上處 理器執(zhí)行。所述一個或者一個W上程序包含用于執(zhí)行W下操作的指令:
[0133] 創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,所述內(nèi)存緩存中的數(shù)據(jù)單元W雙向鏈表的方 式進行存儲;
[0134] 判斷所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量;
[0135] 若所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量,將所述雙向鏈表中最后一個 數(shù)據(jù)單元刪除,所述最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù)據(jù)單元; 陽136] 將所述創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置。
[0137] 假設(shè)上述為第一種可能的實施方式,則在第一種可能的實施方式作為基礎(chǔ)而提供 的第二種可能的實施方式中,終端的存儲器中,還包含用于執(zhí)行W下操作的指令:
[0138] 判斷所述創(chuàng)建的數(shù)據(jù)單元占用的存儲空間是否大于第一預設(shè)闊值;
[0139] 若所述創(chuàng)建的數(shù)據(jù)單元占用的存儲空間不大于第一預設(shè)闊值,則執(zhí)行將所述創(chuàng)建 的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置的步驟。
[0140] 在第一種可能的實施方式作為基礎(chǔ)而提供的第Ξ種可能的實施方式中,終端的存 儲器中,還包含用于執(zhí)行W下操作的指令: 陽141] 每隔預設(shè)周期檢測所述雙向鏈表占用的存儲空間;
[0142] 若所述雙向鏈表占用的存儲空間大于第二預設(shè)闊值,按照從后往前的順序,對所 述雙向鏈表中的數(shù)據(jù)單元進行刪除,直到所述雙向鏈表占用的存儲空間不大于第Ξ預設(shè)闊 值,所述第Ξ預設(shè)闊值小于所述第二預設(shè)闊值。 陽143] 在第一種可能的實施方式作為基礎(chǔ)而提供的第四種可能的實施方式中,終端的存 儲器中,還包含用于執(zhí)行W下操作的指令:
[0144] 根據(jù)所述創(chuàng)建的數(shù)據(jù)單元,生成所述創(chuàng)建的數(shù)據(jù)單元的序列號;
[0145] 根據(jù)所述創(chuàng)建的數(shù)據(jù)單元在所述內(nèi)存緩存中的存儲地址,定義對應的引用; 陽146] 建立所述創(chuàng)建的數(shù)據(jù)單元的序列號及引用之間的映射關(guān)系,得到索引信息; 陽147] 將所述索引信息保存至索引信息表中。
[0148] 在第四種可能的實施方式作為基礎(chǔ)而提供的第五種可能的實施方式中,終端的存 儲器中,還包含用于執(zhí)行W下操作的指令:
[0149] 獲取數(shù)據(jù)訪問請求,所述數(shù)據(jù)訪問請求中至少包含序列號;
[0150] 根據(jù)所述數(shù)據(jù)訪問請求中的序列號,在所述索引信息表中進行查詢,得到對應的 引用; 陽151] 根據(jù)查詢到的引用,訪問所述雙向鏈表中對應的數(shù)據(jù)單元。
[0152] 在第一種可能的實施方式或第五種可能的實施方式作為基礎(chǔ)而提供的第六種可 能的實施方式中,終端的存儲器中,還包含用于執(zhí)行W下操作的指令:
[0153] 當檢測到所述雙向鏈表中的任一數(shù)據(jù)單元被訪問時,將所述任一數(shù)據(jù)單元移動至 所述雙向鏈表最前面的位置。
[0154] 本發(fā)明實施例提供的終端,通過判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè) 數(shù)量,并在雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,將雙向鏈表中最后一個數(shù)據(jù)單 元刪除,即刪除最近使用次數(shù)最少的數(shù)據(jù)單元,從而將創(chuàng)建的數(shù)據(jù)單元存儲至雙向鏈表最 前面的位置,為可能被訪問多次的數(shù)據(jù)單元留下存儲空間。因此,內(nèi)存緩存的利用率較高。
[0155] 本發(fā)明實施例還提供了一種計算機可讀存儲介質(zhì),該計算機可讀存儲介質(zhì)可W是 上述實施例中的存儲器中所包含的計算機可讀存儲介質(zhì);也可W是單獨存在,未裝配入終 端中的計算機可讀存儲介質(zhì)。該計算機可讀存儲介質(zhì)存儲有一個或者一個W上程序,該一 個或者一個W上程序被一個或者一個W上的處理器用來執(zhí)行實現(xiàn)數(shù)據(jù)存儲方法,該方法包 括:
[0156] 創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,所述內(nèi)存緩存中的數(shù)據(jù)單元W雙向鏈表的方 式進行存儲; 陽157] 判斷所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量;
[0158] 若所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量,將所述雙向鏈表中最后一個 數(shù)據(jù)單元刪除,所述最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù)據(jù)單元;
[0159] 將所述創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置。
[0160] 假設(shè)上述為第一種可能的實施方式,則在第一種可能的實施方式作為基礎(chǔ)而提供 的第二種可能的實施方式中,所述將所述創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位 置之前,還包括: 陽161] 判斷所述創(chuàng)建的數(shù)據(jù)單元占用的存儲空間是否大于第一預設(shè)闊值; 陽162] 若所述創(chuàng)建的數(shù)據(jù)單元占用的存儲空間不大于第一預設(shè)闊值,則執(zhí)行將所述創(chuàng)建 的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置的步驟。
[0163] 在第一種可能的實施方式作為基礎(chǔ)而提供的第Ξ種可能的實施方式中,所述方法 還包括:
[0164] 每隔預設(shè)周期檢測所述雙向鏈表占用的存儲空間;
[01化]若所述雙向鏈表占用的存儲空間大于第二預設(shè)闊值,按照從后往前的順序,對所 述雙向鏈表中的數(shù)據(jù)單元進行刪除,直到所述雙向鏈表占用的存儲空間不大于第Ξ預設(shè)闊 值,所述第Ξ預設(shè)闊值小于所述第二預設(shè)闊值。
[0166] 在第一種可能的實施方式作為基礎(chǔ)而提供的第四種可能的實施方式中,所述將所 述創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置之后,還包括:
[0167] 根據(jù)所述創(chuàng)建的數(shù)據(jù)單元,生成所述創(chuàng)建的數(shù)據(jù)單元的序列號;
[0168] 根據(jù)所述創(chuàng)建的數(shù)據(jù)單元在所述內(nèi)存緩存中的存儲地址,定義對應的引用;
[0169] 建立所述創(chuàng)建的數(shù)據(jù)單元的序列號及引用之間的映射關(guān)系,得到索引信息; 陽170] 將所述索引信息保存至索引信息表中。 陽171] 在第四種可能的實施方式作為基礎(chǔ)而提供的第五種可能的實施方式中,所述方法 還包括: 陽172] 獲取數(shù)據(jù)訪問請求,所述數(shù)據(jù)訪問請求中至少包含序列號; 陽173] 根據(jù)所述數(shù)據(jù)訪問請求中的序列號,在所述索引信息表中進行查詢,得到對應的 引用;
[0174] 根據(jù)查詢到的引用,訪問所述雙向鏈表中對應的數(shù)據(jù)單元。
[01巧]在第一種可能的實施方式或第五種可能的實施方式作為基礎(chǔ)而提供的第六種可 能的實施方式中,當檢測到所述雙向鏈表中的任一數(shù)據(jù)單元被訪問時,將所述任一數(shù)據(jù)單 元移動至所述雙向鏈表最前面的位置。
[0176] 本發(fā)明實施例提供的計算機可讀存儲介質(zhì),通過判斷雙向鏈表中的數(shù)據(jù)單元的個 數(shù)是否達到預設(shè)數(shù)量,并在雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,將雙向鏈表中 最后一個數(shù)據(jù)單元刪除,即刪除最近使用次數(shù)最少的數(shù)據(jù)單元,從而將創(chuàng)建的數(shù)據(jù)單元存 儲至雙向鏈表最前面的位置,為可能被訪問多次的數(shù)據(jù)單元留下存儲空間。因此,內(nèi)存緩存 的利用率較高。
[0177] 本發(fā)明實施例提供了一種圖形用戶接口,所述圖形用戶接口用在終端上,所述終 端包括觸摸屏顯示器、存儲器和用于執(zhí)行一個或者一個W上的程序的一個或者一個W上的 處理器;所述圖形用戶接口包括:
[0178] 創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,所述內(nèi)存緩存中的數(shù)據(jù)單元W雙向鏈表的方 式進行存儲;
[0179] 判斷所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量;
[0180] 若所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量,將所述雙向鏈表中最后一個 數(shù)據(jù)單元刪除,所述最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù)據(jù)單元; 陽181] 將所述創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置。
[0182] 本發(fā)明實施例提供的圖形用戶接口,通過判斷雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否 達到預設(shè)數(shù)量,并在雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,將雙向鏈表中最后一 個數(shù)據(jù)單元刪除,即刪除最近使用次數(shù)最少的數(shù)據(jù)單元,從而將創(chuàng)建的數(shù)據(jù)單元存儲至雙 向鏈表最前面的位置,為可能被訪問多次的數(shù)據(jù)單元留下存儲空間。因此,內(nèi)存緩存的利用 率較高。 陽183] 需要說明的是:上述實施例提供的數(shù)據(jù)存儲裝置在存儲數(shù)據(jù)時,僅W上述各功能 模塊的劃分進行舉例說明,實際應用中,可W根據(jù)需要而將上述功能分配由不同的功能模 塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,W完成W上描述的全部或者部分功 能。另外,上述實施例提供的數(shù)據(jù)存儲裝置與數(shù)據(jù)存儲方法實施例屬于同一構(gòu)思,其具體實 現(xiàn)過程詳見方法實施例,運里不再寶述。
[0184] 本領(lǐng)域普通技術(shù)人員可W理解實現(xiàn)上述實施例的全部或部分步驟可W通過硬件 來完成,也可W通過程序來指令相關(guān)的硬件完成,所述的程序可W存儲于一種計算機可讀 存儲介質(zhì)中,上述提到的存儲介質(zhì)可W是只讀存儲器,磁盤或光盤等。
[0185] W上所述僅為本發(fā)明的較佳實施例,并不用W限制本發(fā)明,凡在本發(fā)明的精神和 原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
【主權(quán)項】
1. 一種數(shù)據(jù)存儲方法,其特征在于,所述方法包括: 創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,所述內(nèi)存緩存中的數(shù)據(jù)單元以雙向鏈表的方式進 行存儲; 判斷所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量; 若所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量,將所述雙向鏈表中最后一個數(shù)據(jù) 單元刪除,所述最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù)據(jù)單元; 將創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向 鏈表最前面的位置之前,還包括: 判斷所述創(chuàng)建的數(shù)據(jù)單元占用的存儲空間是否大于第一預設(shè)閾值; 若所述創(chuàng)建的數(shù)據(jù)單元占用的存儲空間不大于第一預設(shè)閾值,則執(zhí)行將所述創(chuàng)建的數(shù) 據(jù)單元存儲至所述雙向鏈表最前面的位置的步驟。3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 每隔預設(shè)周期檢測所述雙向鏈表占用的存儲空間; 若所述雙向鏈表占用的存儲空間大于第二預設(shè)閾值,按照從后往前的順序,對所述雙 向鏈表中的數(shù)據(jù)單元進行刪除,直到所述雙向鏈表占用的存儲空間不大于第三預設(shè)閾值, 所述第三預設(shè)閾值小于所述第二預設(shè)閾值。4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向 鏈表最前面的位置之后,還包括: 根據(jù)所述創(chuàng)建的數(shù)據(jù)單元,生成所述創(chuàng)建的數(shù)據(jù)單元的序列號; 根據(jù)所述創(chuàng)建的數(shù)據(jù)單元在所述內(nèi)存緩存中的存儲地址,定義對應的引用; 建立所述創(chuàng)建的數(shù)據(jù)單元的序列號及引用之間的映射關(guān)系,得到索引信息; 將所述索引信息保存至索引信息表中。5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述方法還包括: 獲取數(shù)據(jù)訪問請求,所述數(shù)據(jù)訪問請求中至少包含序列號; 根據(jù)所述數(shù)據(jù)訪問請求中的序列號,在所述索引信息表中進行查詢,得到對應的引 用; 根據(jù)查詢到的引用,訪問所述雙向鏈表中對應的數(shù)據(jù)單元。6. 根據(jù)權(quán)利要求1至5中任一權(quán)利要求所述的方法,其特征在于,所述方法還包括: 當檢測到所述雙向鏈表中的任一數(shù)據(jù)單元被訪問時,將所述任一數(shù)據(jù)單元移動至所述 雙向鏈表最前面的位置。7. -種數(shù)據(jù)存儲裝置,其特征在于,所述裝置包括: 創(chuàng)建模塊,用于創(chuàng)建待加入內(nèi)存緩存中的數(shù)據(jù)單元,所述內(nèi)存緩存中的數(shù)據(jù)單元以雙 向鏈表的方式進行存儲; 第一判斷模塊,用于判斷所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)是否達到預設(shè)數(shù)量; 第一刪除模塊,用于當所述雙向鏈表中的數(shù)據(jù)單元的個數(shù)達到預設(shè)數(shù)量時,將所述雙 向鏈表中最后一個數(shù)據(jù)單元刪除,所述最后一個數(shù)據(jù)單元為最近被訪問次數(shù)最少的數(shù)據(jù)單 元; 存儲模塊,用于將創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置。8. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括: 第二判斷模塊,用于判斷所述創(chuàng)建的數(shù)據(jù)單元占用的存儲空間是否大于第一預設(shè)閾 值; 所述添加模塊,用于當所述創(chuàng)建的數(shù)據(jù)單元占用的存儲空間不大于第一預設(shè)閾值時, 則執(zhí)行將所述創(chuàng)建的數(shù)據(jù)單元存儲至所述雙向鏈表最前面的位置的步驟。9. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括: 檢測模塊,用于每隔預設(shè)周期檢測所述雙向鏈表占用的存儲空間; 第二刪除模塊,用于當所述雙向鏈表占用的存儲空間大于第二預設(shè)閾值時,按照從后 往前的順序,對所述雙向鏈表中的數(shù)據(jù)單元進行刪除,直到所述雙向鏈表占用的存儲空間 不大于第三預設(shè)閾值,所述第三預設(shè)閾值小于所述第二預設(shè)閾值。10. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括: 生成模塊,用于根據(jù)所述創(chuàng)建的數(shù)據(jù)單元,生成所述創(chuàng)建的數(shù)據(jù)單元的序列號; 定義模塊,用于根據(jù)所述創(chuàng)建的數(shù)據(jù)單元在所述內(nèi)存緩存中的存儲地址,定義對應的 引用; 建立模塊,用于建立所述創(chuàng)建的數(shù)據(jù)單元的序列號及引用之間的映射關(guān)系,得到索引 信息; 保存模塊,用于將所述索引信息保存至索引信息表中。11. 根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述裝置還包括: 獲取模塊,用于獲取數(shù)據(jù)訪問請求,所述數(shù)據(jù)訪問請求中至少包含序列號; 查詢模塊,用于根據(jù)所述數(shù)據(jù)訪問請求中的序列號,在所述索引信息表中進行查詢,得 到對應的引用; 訪問模塊,用于根據(jù)查詢到的引用,訪問所述雙向鏈表中對應的數(shù)據(jù)單元。12. 根據(jù)權(quán)利要求7至11中任一權(quán)利要求所述的裝置,其特征在于,所述裝置還包括: 移動模塊,用于當檢測到所述雙向鏈表中的任一數(shù)據(jù)單元被訪問時,將所述任一數(shù)據(jù) 單元移動至所述雙向鏈表最前面的位置。
【文檔編號】G06F3/06GK105988715SQ201510060667
【公開日】2016年10月5日
【申請日】2015年2月5日
【發(fā)明人】王剛
【申請人】深圳市騰訊計算機系統(tǒng)有限公司