国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

緩存模塊設(shè)計(jì)淺談

2013-04-29 05:11:24佘勇虞芬
無線互聯(lián)科技 2013年6期
關(guān)鍵詞:客戶端

佘勇 虞芬

摘 要:隨著社會(huì)和計(jì)算機(jī)水平的不斷的發(fā)展,人們在日常生活和工作中處理的數(shù)據(jù)越來越多,這給數(shù)據(jù)庫服務(wù)器帶來很大的負(fù)擔(dān),并且大量的數(shù)據(jù)傳送造成網(wǎng)絡(luò)傳輸瓶頸。大量的用戶都需要通過數(shù)據(jù)庫來查詢符合自己需求的數(shù)據(jù),而且很多的用戶查詢的是相同的數(shù)據(jù)。開始人們用提升服務(wù)器的配置來解決工作負(fù)擔(dān)大的問題,但這是換湯不換藥的做法,沒有從根本上解決這個(gè)問題??刹捎镁彺鏈p輕服務(wù)器的負(fù)擔(dān),把以前查詢過的結(jié)果存放在客戶端,再有相同的查詢時(shí)不用去請(qǐng)求服務(wù)器返回結(jié)果,而是由客戶端直接返回結(jié)果給用戶。這篇論文主要討論緩存模塊中數(shù)據(jù)庫返回的查詢結(jié)果如何存取。

關(guān)鍵詞:Cache;OSCache;緩存;客戶端;數(shù)據(jù)庫服務(wù)器

文件存取模塊的設(shè)計(jì)

下面我們以Map接口為例來說明設(shè)計(jì)下文件存取模塊使用各種實(shí)現(xiàn)類時(shí),總是要生成數(shù)據(jù)結(jié)構(gòu)的具體實(shí)現(xiàn),因?yàn)橄到y(tǒng)不知道集合中如何存放對(duì)象。但在訪問實(shí)際集合時(shí),用使用接口的方法,這樣就可以在需要時(shí)將數(shù)據(jù)結(jié)構(gòu)從數(shù)組集合變成散列表的集合然后由于集合類仍然實(shí)現(xiàn)相同的集合接口,不需要改變他的代碼。

用何種方式存放對(duì)象呢?這是緩存最為重要的一步,在Java 2中有很多的數(shù)據(jù)結(jié)構(gòu)接口,接口和集合類的選擇是緩存非常重要的。

Map接口用于保持關(guān)鍵字(Key)和數(shù)值(Value)的集合,集合中的每個(gè)項(xiàng)目加入時(shí)都提供數(shù)值和關(guān)鍵字

Map接口有三個(gè)實(shí)現(xiàn)集合類;HashMap、WeakHashMap、和TreeMap 類。HashMap是基于Hash表的映射;WeakHashMap是基于弱引用Hash表的映射;TreeHash是基于平衡樹的映射。

Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Map interface的一個(gè)實(shí)現(xiàn) HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許 還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會(huì)有很大的差異。

HashMap可謂JDK的一大實(shí)用工具,把各個(gè)Object映射起來,實(shí)現(xiàn)了“鍵--值”對(duì)應(yīng)的快速存取。但實(shí)際里面做了些什么呢?

在這之前,先介紹一下負(fù)載因子和容量的屬性。大家都知道其實(shí)一個(gè)HashMap 的實(shí)際容量就因子*容量,其默認(rèn)值是 16×0.75=12;這個(gè)很重要,對(duì)效率很一定影響!當(dāng)存入HashMap的對(duì)象超過這個(gè)容量時(shí),HashMap 就會(huì)重新構(gòu)造存取表。兩個(gè)關(guān)鍵的方法,put和get:

先有這樣一個(gè)概念,HashMap是聲明了Map,Cloneable, Serializable接口,和繼承了AbstractMap類,里面的 Iterator其實(shí)主要都是其內(nèi)部類HashIterator和其他幾個(gè) iterator類實(shí)現(xiàn),當(dāng)然還有一個(gè)很重要的繼承了Map.Entry的 Entry內(nèi)部類,它包含了hash,value,key和next這四個(gè)屬性,很重要。

這個(gè)就是判斷鍵值是否為空,并不很深?yuàn)W,其實(shí)如果為空,它會(huì)返回一個(gè)static Object作為鍵值,這就是為什么HashMap允許空鍵值的原因。

我們把關(guān)鍵的方法拿出來分析:

因?yàn)閔ash的算法有可能令不同的鍵值有相同的hash碼并有相同的table索引,如:key=“33”和key=Object g的hash都是-8901334,那它經(jīng)過indexfor之后的索引一定都為i,這樣在new的時(shí)候這個(gè)Entry的next就會(huì)指向這個(gè)原本的table[i],再有下一個(gè)也如此,形成一個(gè)鏈表,和put的循環(huán)對(duì)定e.next獲得舊的值。到這里,HashMap的結(jié)構(gòu),大家也十分明白了吧?

所謂的重構(gòu)也不萬能的,就是建一個(gè)兩倍大的table,然后再一個(gè)個(gè)indexfor進(jìn)去,如果你能讓你的HashMap不需要重構(gòu)那么多次,效率會(huì)大大提高!

[參考文獻(xiàn)]

[1]飛思科技產(chǎn)品研發(fā)中心.《Java 2應(yīng)用開發(fā)指南》.電子工業(yè)出版社.

[2]王亞平.《數(shù)據(jù)庫系統(tǒng)工程師教程》.清華大學(xué)出版社.

[3]肖軍模.《程序設(shè)計(jì)語言編譯方法》.大連理工大學(xué)出版社.

猜你喜歡
客戶端
你的手機(jī)安裝了多少個(gè)客戶端
你的手機(jī)安裝了多少個(gè)客戶端
如何看待傳統(tǒng)媒體新聞客戶端的“斷舍離”?
新聞客戶端如何以社群化運(yùn)作擴(kuò)大影響力
淺談甬派客戶端的時(shí)政新聞如何接地氣
黨報(bào)客戶端如何深耕基層實(shí)施差異化競爭——以浙江新聞客戶端蒼南頻道為例
縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
孵化垂直頻道:新聞客戶端新策略
基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
電子測試(2018年10期)2018-06-26 05:53:34
大樞紐 云平臺(tái) 客戶端——中央人民廣播電臺(tái)的探索之路
阿克陶县| 麻城市| 岗巴县| 札达县| 徐州市| 崇州市| 辉南县| 泰安市| 图木舒克市| 义马市| 凤庆县| 和政县| 酒泉市| 苗栗市| 马公市| 武定县| 安陆市| 敖汉旗| 阿合奇县| 新营市| 仁寿县| 长丰县| 台东市| 内江市| 永吉县| 从江县| 上犹县| 罗平县| 牡丹江市| 三都| 白沙| 平远县| 东丽区| 德州市| 麻栗坡县| 财经| 肃宁县| 阜南县| 临漳县| 马公市| 德格县|