一種帶有可變唯一值的實體緩存方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種帶有可變唯一值的實體緩存方法及裝置,所述方法包括:新建一個用于緩存實體的實體緩存Java類,讓其組合一個哈希映射HashMap對象;新建一個與實體相對應的實體Java類,并設(shè)置該實體Java類為被觀察者;設(shè)置實體緩存Java類為觀察者,以使得用戶通過實體Java類進行實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值。本發(fā)明由于使用Map對實體進行緩存,因此通過唯一值對實體進行查找的時候,其時間復雜度將大大降低,并且當實體的唯一值發(fā)生改變的時候,持有該實體的Map能夠自動的將新的唯一值更新成新的鍵值,其既滿足了實體緩存的需求,同時也極大的提高了系統(tǒng)的運行效率。
【專利說明】一種帶有可變唯一值的實體緩存方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Java程序開發(fā)領(lǐng)域,更具體地說,涉及一種利用Map進行帶有可變唯一值的實體緩存方法及裝置。
【背景技術(shù)】
[0002]在Java中,線性鏈表List和映射表Map (其為一種鍵值映射)都是Java中用來存儲對象的集合,不同之處是,List存儲的是一個一個的對象,而Map存儲的是一個個的鍵值(Key-Value)對,并且所述鍵具有唯一值。
[0003]當系統(tǒng)頻繁訪問某些實體數(shù)據(jù)(比如該實體為用戶信息)的時候,為了避免每次都進行數(shù)據(jù)庫的訪問或者數(shù)據(jù)文件的讀取,常常需要將這些實體數(shù)據(jù)用一個全局的靜態(tài)數(shù)據(jù)進行緩存。
[0004]另外,實際應用當中,由于有時需要對實體數(shù)據(jù)信息進行更新操作,例如有時需要更新實體的唯一值,如用戶更新其用戶登錄名,此時雖然實體的唯一值發(fā)生了改變,但是實體對應的鍵值并沒有改變。
[0005]目前,常常使用List來對這些實體數(shù)據(jù)進行緩存,在實際應用當中,當需要查找某個實體信息的時候,往往需要對List進行遍歷查找,通過查找的唯一值條件跟遍歷出來的實體數(shù)據(jù)進行比對,若匹配就算查找到。
[0006]然而,由于每次查找實體都需要遍歷循環(huán),導致其性能較為低下,尤其當需要查找的實體位于List的最后一個位置時,系統(tǒng)則需要遍歷η次(其中,η等于集合的長度),更甚者,當緩存的實體比較多,以致集合比較長,且查找比較頻繁的時候,采用該方法進行實體緩存將會存在嚴重的性能問題。
【發(fā)明內(nèi)容】
[0007]觀察者模式是一種一對多的對應關(guān)系,當一個對象發(fā)生改變的時候,多個對象自發(fā)的發(fā)生改變。本發(fā)明即基于觀察者模式的設(shè)計思想,用Map去監(jiān)控實體的改變:當實體的唯一值發(fā)生改變之后,存儲該實體的多個Map自發(fā)的更新鍵值,這樣既能適應實體的變化,又能使通過唯一值進行實體查找的時間長度大大降低,即不需要遍歷循環(huán)就可以直接取出所需要的實體對象,能夠極大的提高系統(tǒng)的運行效率。
[0008]鑒于此,本發(fā)明提供了一種帶有可變唯一值的實體緩存方法及裝置。
[0009]為了達到本發(fā)明的目的,本發(fā)明采用以下技術(shù)方案實現(xiàn):
[0010]一種帶有可變唯一值的實體緩存方法,包括:
[0011]新建一個用于緩存實體的實體緩存Java類,讓其組合一個哈希映射HashMap對象,其中,所述實體緩存Java類還用于對實體對象進行更新操作,并將實體的更新操作委托給哈希映射HashMap對象去執(zhí)行;
[0012]新建一個與實體相對應的實體Java類,并設(shè)置該實體Java類為被觀察者;
[0013]設(shè)置實體緩存Java類為觀察者,以使得用戶通過實體Java類進行實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值。
[0014]優(yōu)選地,所述更新操作包括增、刪、查操作。
[0015]優(yōu)選地,設(shè)置所述實體Java類為被觀察者的方法為:
[0016]讓實體Java類繼承Java開發(fā)環(huán)境JDK提供的Observable類,或者設(shè)置實體Java類成為Observable子類。
[0017]優(yōu)選地,當實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值的方法包括:
[0018]在新增實體時,實體緩存Java類將自身注冊為實體的觀察者;
[0019]或者,在刪除實體時,實體緩存Java類將自身從實體的觀察者隊列中移除。
[0020]優(yōu)選地,當實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值的方法包括:
[0021]當用戶更新實體唯一值時,先標記改變,并將唯一值信息更新通知給所有緩存了該實體的實體緩存Java類;
[0022]實體緩存Java類作為觀察者收到唯一值信息更新通知之后,據(jù)此更新與該實體所對應的鍵值。
[0023]優(yōu)選地,所述更新與實體所對應的鍵值的方法為:
[0024]獲取之前存儲的實體的歷史唯一值;
[0025]依據(jù)該歷史唯一值作為鍵值將實體刪除;
[0026]依據(jù)實體新的唯一值作為鍵值對實體進行鍵值更新并存儲。
[0027]—種帶有可變唯一值的實體緩存裝置,包括:
[0028]第一處理模塊,用于新建一個用于緩存實體的實體緩存Java類,讓其組合一個哈希映射HashMap對象,其中,所述實體緩存Java類還用于對實體對象進行更新操作,并將實體的更新操作委托給哈希映射HashMap對象去執(zhí)行;
[0029]第二處理模塊,用于新建一個與實體相對應的實體Java類,并設(shè)置該實體Java類為被觀察者;
[0030]第三處理模塊,用于設(shè)置實體緩存Java類為觀察者,以使得用戶通過實體Java類進行實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值。
[0031]優(yōu)選地,所述更新操作包括增、刪、查操作。
[0032]優(yōu)選地,第二處理模塊設(shè)置所述實體Java類為被觀察者的方法為:
[0033]讓實體Java類繼承Java開發(fā)環(huán)境JDK提供的Observable類,或者設(shè)置實體Java類成為Observable子類。
[0034]優(yōu)選地,當實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值的方法包括:
[0035]在新增實體時,實體緩存Java類將自身注冊為實體的觀察者;
[0036]或者,在刪除實體時,實體緩存Java類將自身從實體的觀察者隊列中移除。
[0037]優(yōu)選地,當實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值的方法包括:
[0038]當用戶更新實體唯一值時,先標記改變,并將唯一值信息更新通知給所有緩存了該實體的實體緩存Java類;[0039]實體緩存Java類作為觀察者收到唯一值信息更新通知之后,據(jù)此更新與該實體所對應的鍵值。
[0040]優(yōu)選地,所述更新與實體所對應的鍵值的方法為:
[0041]獲取之前存儲的實體的歷史唯一值;
[0042]依據(jù)該歷史唯一值作為鍵值將實體刪除;
[0043]依據(jù)實體新的唯一值作為鍵值對實體進行鍵值更新并存儲。
[0044]通過上述本發(fā)明的技術(shù)方案可以看出,在本發(fā)明中,由于使用Map對實體進行緩存,因此通過唯一值對實體進行查找的時候,其時間復雜度將大大降低,并且當實體的唯一值發(fā)生改變的時候,持有該實體的Map能夠自動的將新的唯一值更新成新的鍵值,其既滿足了實體緩存的需求,同時也極大的提高了系統(tǒng)的運行效率。
【專利附圖】
【附圖說明】
[0045]圖1為本發(fā)明實施例提供的帶有可變唯一值的實體緩存方法流程示意圖;
[0046]圖2為本發(fā)明實施例提供的帶有可變唯一值的實體緩存裝置結(jié)構(gòu)示意圖;
[0047]圖3為本發(fā)明實施例提供的實體更新流程示意圖;
[0048]圖4為本發(fā)明實施例提供的實體緩存和更新的類的UML (Unified ModelingLanguage,統(tǒng)一建模語言或標準建模語言)圖。
[0049]本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)異效果,下面將結(jié)合具體實施例以及附圖做進一步的說明。
【具體實施方式】
[0050]下面結(jié)合附圖和具體實施例對本發(fā)明所述技術(shù)方案作進一步的詳細描述,以使本領(lǐng)域的技術(shù)人員可以更好的理解本發(fā)明并能予以實施,但所舉實施例不作為對本發(fā)明的限定。
[0051]如圖1所示,本發(fā)明實施例提供了一種帶有可變唯一值的實體緩存方法,其包括如下步驟:
[0052]S10、新建一個用于緩存實體的實體緩存Java類,讓其組合一個哈希映射HashMap對象,其中,所述哈希映射HashMap對象為基于哈希表的Map接口的實現(xiàn),所述實體緩存Java類還用于對實體對象進行更新操作,并將實體的更新操作委托給哈希映射HashMap對象去執(zhí)行。
[0053]例如,在本實施例中,所述更新操作包括增、刪、查操作,該實體緩存Java類用來增、刪、查實體對象,同時將實體的增、刪、查委托給哈希映射HashMap去執(zhí)行;
[0054]S20、新建一個與實體相對應的實體Java類,并設(shè)置該實體Java類為被觀察者;
[0055]在該步驟中,由于JDK (Java開發(fā)環(huán)境)提供了對觀察者模式的支持,我們只需要讓實體Java類繼承Java開發(fā)環(huán)境JDK提供的Observable類,或者設(shè)置實體Java類成為Observable子類,該實體Java就是可被觀察的;
[0056]S30、設(shè)置實體緩存Java類為觀察者,以使得用戶通過實體Java類進行實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值。
[0057]例如,同樣由于Java開發(fā)環(huán)境JDK的支持,在實際實施過程中,只需要讓該實體緩存Java類實現(xiàn)Java開發(fā)環(huán)境JDK提供的Observer接口,讓該類成為Observer接口的一種實現(xiàn)方式,該實體緩存類就是一個觀察者,當實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值的方法包括:
[0058]在新增實體時,實體緩存Java類將自身注冊為實體的觀察者;
[0059]或者,在刪除實體時,實體緩存Java類將自身從實體的觀察者隊列中移除。
[0060]優(yōu)選實施方式下,在所述步驟S30中,當實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值的方法包括:
[0061]S301、當用戶更新實體唯一值時,先標記改變(由于實體的唯一值跟緩存該實體的map的鍵值是一一對應,因此更新實體的非唯一值的時候不需要標記改變,只有標記改變的實體才需要通知給觀察者),并將唯一值信息更新通知給所有緩存了該實體的實體緩存Java 類;
[0062]S302、實體緩存Java類作為觀察者收到唯一值信息更新通知之后,據(jù)此更新與該實體所對應的鍵值。
[0063]在本實施例中,所述更新與實體所對應的鍵值的方法為:
[0064]S3021、獲取之前存儲的實體的歷史唯一值;
[0065]S3022、依據(jù)該歷史唯一值作為鍵值將實體刪除;
[0066]S3023、依據(jù)實體新的唯一值作為鍵值對實體進行鍵值更新并存儲。
[0067]如圖3、圖4所示,下面將結(jié)合具體實施例具體講述本發(fā)明提供的帶有可變唯一值的實體緩存方法實施流程,其包括如下具體實施步驟:
[0068]步驟一:新建實體緩存Java類MyCollection并組合一個HashMap對象,本實施例中,使用泛型技術(shù),使得存儲在HashMap中的對象只能為實體類Entity或者它的子類,并在新增實體的時候調(diào)用HashMap的put O方法進行存儲,在刪除實體的時候調(diào)用HashMap的remove ()方法進行刪除,在查詢實體的時候通過調(diào)用HashMap的get O方法進行查找,其
中,示例代碼如下:
[0069]
【權(quán)利要求】
1.一種帶有可變唯一值的實體緩存方法,其特征在于,包括:新建一個用于緩存實體的實體緩存Java類,讓其組合一個哈希映射HashMap對象,其中,所述實體緩存Java類還用于對實體對象進行更新操作,并將實體的更新操作委托給哈希映射HashMap對象去執(zhí)行;新建一個與實體相對應的實體Java類,并設(shè)置該實體Java類為被觀察者;設(shè)置實體緩存Java類為觀察者,以使得用戶通過實體Java類進行實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值。
2.如權(quán)利要求1所述的帶有可變唯一值的實體緩存方法,其特征在于,所述更新操作包括增、刪、查操作。
3.如權(quán)利要求1所述的帶有可變唯一值的實體緩存方法,其特征在于,設(shè)置所述實體Java類為被觀察者的方法為:讓實體Java類繼承Java開發(fā)環(huán)境JDK提供的Observable類,或者設(shè)置實體Java類成為Observable子類。
4.如權(quán)利要求2所述的帶有可變唯一值的實體緩存方法,其特征在于,當實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值的方法包括:在新增實體時,實體緩存J ava類將自身注冊為實體的觀察者;或者,在刪除實體時,實體緩存Java類將自身從實體的觀察者隊列中移除。
5.如權(quán)利要求2所述的帶有可變唯一值的實體緩存方法,其特征在于,當實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值的方法包括:當用戶更新實體唯一值時,先標記改變,并將唯一值信息更新通知給所有緩存了該實體的實體緩存Java類;實體緩存Java類作為觀察者收到唯一值信息更新通知之后,據(jù)此更新與該實體所對應的鍵值。
6.如權(quán)利要求5所述的帶有可變唯一值的實體緩存方法,其特征在于,更新與實體所對應的鍵值的方法為:獲取之前存儲的實體的歷史唯一值;依據(jù)該歷史唯一值作為鍵值將實體刪除;依據(jù)實體新的唯一值作為鍵值對實體進行鍵值更新并存儲。
7.一種帶有可變唯一值的實體緩存裝置,其特征在于,包括:第一處理模塊,用于新建一個用于緩存實體的實體緩存Java類,讓其組合一個哈希映射HashMap對象,其中,所述實體緩存Java類還用于對實體對象進行更新操作,并將實體的更新操作委托給哈希映射HashMap對象去執(zhí)行;第二處理模塊,用于新建一個與實體相對應的實體Java類,并設(shè)置該實體Java類為被觀察者;第三處理模塊,用于設(shè)置實體緩存Java類為觀察者,以使得用戶通過實體Java類進行實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值。
8.如權(quán)利要求7所述的帶有可變唯一值的實體緩存裝置,其特征在于,所述更新操作包括增、刪、查操作。
9.如權(quán)利要求7所述的帶有可變唯一值的實體緩存裝置,其特征在于,第二處理模塊設(shè)置所述實體Java類為被觀察者的方法為: 讓實體Java類繼承Java開發(fā)環(huán)境JDK提供的Observable類,或者設(shè)置實體Java類成為Observable子類。
10.如權(quán)利要求8所述的帶有可變唯一值的實體緩存裝置,其特征在于,當實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值的方法包括: 在新增實體時,實體緩存Java類將自身注冊為實體的觀察者; 或者,在刪除實體時,實體緩存Java類將自身從實體的觀察者隊列中移除。
11.如權(quán)利要求8所述的帶有可變唯一值的實體緩存裝置,其特征在于,當實體更新時,擁有實體的Map能夠根據(jù)實體更新過的唯一值來更新鍵值的方法包括: 當用戶更新實體唯一值時,先標記改變,并將唯一值信息更新通知給所有緩存了該實體的實體緩存Java類; 實體緩存Java類作為觀察者收到唯一值信息更新通知之后,據(jù)此更新與該實體所對應的鍵值。
12.如權(quán)利要求11所述的帶有可變唯一值的實體緩存裝置,其特征在于,更新與實體所對應的鍵值的方法為: 獲取之前存儲的實體的歷史唯一值; 依據(jù)該歷史唯一值作為鍵值將實體刪除; 依據(jù)實體新的唯一值作為鍵值對實體進行鍵值更新并存儲。
【文檔編號】G06F9/45GK103677949SQ201210346618
【公開日】2014年3月26日 申請日期:2012年9月18日 優(yōu)先權(quán)日:2012年9月18日
【發(fā)明者】張雪林, 萬正沖 申請人:深圳中興力維技術(shù)有限公司