亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        內(nèi)存緩存機(jī)制在.NET平臺上的設(shè)計(jì)與實(shí)現(xiàn)

        2018-05-14 09:57:28徐曉思
        關(guān)鍵詞:命中率

        徐曉思

        摘要:對于使用數(shù)據(jù)庫存儲數(shù)據(jù)的系統(tǒng)而言,硬盤較慢的讀取速度極大的限制了系統(tǒng)整體性能的提高。內(nèi)存緩存機(jī)制將常用的數(shù)據(jù)從數(shù)據(jù)庫緩存到內(nèi)存中并實(shí)時(shí)調(diào)整緩存數(shù)據(jù),有效的提高了數(shù)據(jù)的查詢效率,降低了系統(tǒng)的響應(yīng)時(shí)間。

        關(guān)鍵詞:內(nèi)存緩存;.NET;命中率

        中圖分類號:TP333 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2018)02-0139-05

        1 引言

        對于使用數(shù)據(jù)庫存儲數(shù)據(jù)的系統(tǒng)而言,面臨的主要問題是如何高效的查詢數(shù)據(jù),而硬盤較慢的讀取速度極大的限制了系統(tǒng)整體性能的提高。由于數(shù)據(jù)庫存儲的數(shù)據(jù)量通常都比較大,如果一次性將所有數(shù)據(jù)全部緩存到內(nèi)存中,會導(dǎo)致內(nèi)存緊張甚至溢出,影響整個(gè)系統(tǒng)的性能和穩(wěn)定性。因此,需要在.NET平臺上設(shè)計(jì)并實(shí)現(xiàn)一個(gè)內(nèi)存緩存機(jī)制,將部分使用到的數(shù)據(jù)從數(shù)據(jù)庫緩存到內(nèi)存中,并根據(jù)緩存項(xiàng)的命中情況自動(dòng)調(diào)整緩存數(shù)據(jù),以提高數(shù)據(jù)讀取的效率。

        2 設(shè)計(jì)

        當(dāng)有數(shù)據(jù)讀取請求的時(shí)候,首先檢查是否命中,即要讀取的數(shù)據(jù)是否在緩存中。如果命中,則直接讀取緩存中的數(shù)據(jù)進(jìn)行使用,并更新緩存的狀態(tài)。如果數(shù)據(jù)不在緩存中,則首先讀取數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行使用,然后將數(shù)據(jù)添加到緩存中。為了防止內(nèi)存溢出,在程序中對緩存數(shù)據(jù)的數(shù)量設(shè)置了上限。當(dāng)需要將數(shù)據(jù)添加到緩存中的時(shí)候,首先會檢查緩存是否已滿,如果緩存已滿,則根據(jù)清理算法對緩存進(jìn)行清理后,再將新的數(shù)據(jù)添加到緩存中。數(shù)據(jù)讀取的流程圖如圖1所示。

        為了提高命中率,在有數(shù)據(jù)庫寫入操作的時(shí)候,同樣需要更新緩存中的數(shù)據(jù)。當(dāng)有數(shù)據(jù)庫寫入請求的時(shí)候,首先將數(shù)據(jù)寫入到數(shù)據(jù)庫,然后檢查是否命中,即要寫入的數(shù)據(jù)是否在緩存中。如果命中,則更新緩存項(xiàng)的數(shù)據(jù)和狀態(tài)。如果沒有命中,則需要將數(shù)據(jù)添加到緩存中。同樣,在添加的時(shí)候需要首先檢查緩存是否已滿,如果已滿則需要首先清理緩存后,再將新的數(shù)據(jù)添加到緩存中。數(shù)據(jù)寫入的流程圖如圖2所示。

        內(nèi)存緩存機(jī)制使用特定的緩存清理算法,緩存項(xiàng)中除了記錄數(shù)據(jù),還記錄了該項(xiàng)的首次命中時(shí)間FirstTime(添加到緩存中的時(shí)間)、最后命中時(shí)間LastTime(最后一次被讀取或修改的時(shí)間)以及命中次數(shù)HitCount,并從以下四個(gè)角度去設(shè)計(jì)緩存清理算法:

        (1)命中次數(shù):對內(nèi)存中所有緩存項(xiàng)按照HitCount進(jìn)行排序,清理所有HitCount低于閾值的緩存項(xiàng)。

        (2)最后命中時(shí)間:對內(nèi)存中所有的緩存項(xiàng)按照LastTime進(jìn)行排序,清理所有LastTime早于閾值的緩存項(xiàng)。

        (3)平均命中周期:根據(jù)當(dāng)前時(shí)間CurrentTime計(jì)算出緩存項(xiàng)的平均命中周期AveragePeriod并排序,清理所有AveragePeriod高于閾值的緩存項(xiàng),計(jì)算公式為AveragePeriod=(CurrentTime-FirstTime)/HitCount。

        (4)首次命中時(shí)間:如果前三種算法都未生效,則對內(nèi)存中所有的緩存項(xiàng)按照FirstTime進(jìn)行排序,清理FirstTime最早的那一項(xiàng)。

        所有的閾值都可以在配置文件中進(jìn)行設(shè)置。根據(jù)不同的部署環(huán)境設(shè)置不同的閾值能夠有效的保證緩存的命中率和清理算法的效率。

        3 實(shí)現(xiàn)

        內(nèi)存緩存機(jī)制依靠CacheItem、CacheGroup和CacheManager這三個(gè)類來實(shí)現(xiàn),類之間的關(guān)系如圖3所示。

        CacheItem是緩存項(xiàng)在代碼中的實(shí)現(xiàn),用來存儲緩存的內(nèi)容。同時(shí),該類還包含與命中有關(guān)的屬性,并提供了獲取和更新緩存內(nèi)容的方法。

        CacheItem包含以下私有屬性:

        (1)id:緩存項(xiàng)的唯一標(biāo)識符,String類型。CacheManager必須通過id才能在CacheGroup中找到對應(yīng)的緩存項(xiàng),這個(gè)屬性在CacheItem創(chuàng)建的時(shí)候被賦值,并且在緩存項(xiàng)的生命周期中始終保持不變。因此,該屬性通過只讀公有字段Id開放給外部讀取,但是不能被修改。

        (2)content:用于存儲緩存的內(nèi)容,這個(gè)屬性是Object類型的,因此可以存儲.NET中的任何對象。由于對content的讀取和修改會引起該緩存項(xiàng)命中相關(guān)屬性的變化,因此外部無法直接操作該屬性,必須通過CacheItem提供的方法來對內(nèi)容進(jìn)行讀取和修改。

        (3)hitCount:命中次數(shù),Integer類型。該屬性記錄緩存項(xiàng)的命中次數(shù),在緩存內(nèi)容被讀取或修改的時(shí)候會自動(dòng)增長,因此通過只讀公有字段HitCount提供給外部讀取,但是不能被修改。

        (4)firstTime:首次命中時(shí)間,DateTime類型。該屬性記錄緩存項(xiàng)添加到緩存中的時(shí)間,在CacheItem創(chuàng)建的時(shí)候被賦值,并且在緩存項(xiàng)的生命周期中始終保持不變。因此,該屬性通過只讀公有字段FirstTime開放給外部讀取,但是不能被修改。

        (5)lastTime:最后命中時(shí)間,DateTime類型。該屬性記錄緩存項(xiàng)最后一次被讀取或修改的時(shí)間,在緩存內(nèi)容被讀取或修改的時(shí)候會自動(dòng)更新,因此通過只讀公有字段LastTime提供給外部讀取,但是不能被修改。

        除此之外,CacheItem還包含一個(gè)只讀公有字段Average Period,該字段根據(jù)公式計(jì)算緩存項(xiàng)的平均命中周期,在每次被讀取的時(shí)候自動(dòng)進(jìn)行計(jì)算。

        CacheItem的構(gòu)造函數(shù)包括兩個(gè)參數(shù)id和content,用于在創(chuàng)建的時(shí)候?qū)儆诰彺骓?xiàng)的唯一標(biāo)識符和內(nèi)容。

        CacheItem包含以下兩個(gè)公有方法:

        (1)RetrieveContent:該方法用于返回緩存項(xiàng)的內(nèi)容,并自動(dòng)更新lastTime和hitCount兩個(gè)私有屬性。

        (2)UpdateContent:該方法包含一個(gè)Object類型的參數(shù),用于更新緩存項(xiàng)的內(nèi)容,并自動(dòng)更新lastTime和hitCount兩個(gè)私有屬性。

        CacheItem的類圖如圖4所示。

        CacheGroup是緩存項(xiàng)的集合,繼承自KeyedCollection類,泛型TKey的類型是String,泛型TItem的類型是CacheItem。該類通過實(shí)現(xiàn)繼承的GetKeyForItem方法,基于CacheItem的Id生成了索引,使CacheManager可以直接通過查詢索引得到指定Id對應(yīng)的緩存項(xiàng)。

        CacheGroup的類圖如圖5所示。

        CacheManager用于管理CacheGroup及其中的所有CacheItem。該類使用單實(shí)例模式,將構(gòu)造函數(shù)私有化,僅在首次被調(diào)用的時(shí)候私有的創(chuàng)建唯一的實(shí)例instance,并通過只讀公有字段Instance發(fā)布給外部使用。

        CacheManager包含以下私有屬性:

        (1)cacheGroup:CacheGroup類的對象,用于存儲CacheItem。

        (2)max:Integer類型,表示cacheGroup中緩存項(xiàng)的數(shù)量上限。當(dāng)緩存項(xiàng)達(dá)到數(shù)量上限的時(shí)候,如果要再添加緩存項(xiàng),則首先需要對cacheGroup進(jìn)行清理。

        (3)clearStrategies:List類型,包含配置的所有緩存清理策略。

        (4)defaultStrategy:ClearStrategy類型,包含默認(rèn)的緩存清理策略。

        CacheManager包含以下私有方法:

        (1)CheckCapacity:檢查cacheGroup中的緩存項(xiàng)是否達(dá)到數(shù)量上限。

        (2)ClearCache:調(diào)用緩存清理策略清理緩存項(xiàng)。

        (3)CreateCache:添加緩存項(xiàng)。在將緩存項(xiàng)添加到cacheGroup之前,會先調(diào)用CheckCapacity檢查緩存項(xiàng)數(shù)量,如果已經(jīng)達(dá)到上限,則調(diào)用ClearCache方法清理緩存。

        (4)DeleteCache:刪除緩存項(xiàng)。

        CacheManager包含以下公有方法:

        (1)Start:該方法用于啟動(dòng)CacheManager,包含兩個(gè)參數(shù)max和clearStrategies,分別用來設(shè)置緩存項(xiàng)的數(shù)量上限以及用到的緩存清理策略。

        (2)Stop:該方法用于在程序退出的時(shí)候關(guān)閉CacheManager,釋放占用的內(nèi)存。

        (3)RetrieveContent:根據(jù)Id提供對應(yīng)緩存項(xiàng)的內(nèi)容。該方法有兩個(gè)參數(shù),一個(gè)是查詢的Id,另一個(gè)是用out關(guān)鍵字修飾的Object對象content,該對象會在方法結(jié)束的時(shí)候和返回值一起返回給調(diào)用者,返回值的類型是Boolean。如果有緩存項(xiàng)命中,則將命中的內(nèi)容賦值給content并返回True,否則將content賦為空值并返回False。

        (4)UpdateContent:該方法包含兩個(gè)參數(shù)id和content,用于更新id對應(yīng)緩存項(xiàng)的內(nèi)容。如果根據(jù)id無法命中緩存項(xiàng),則調(diào)用CreateCache方法添加緩存項(xiàng)。

        CacheManager的類圖如圖6所示。

        CacheManager、CacheGroup和CacheItem只負(fù)責(zé)緩存讀寫的邏輯,緩存清理的邏輯由緩存清理策略實(shí)現(xiàn)。緩存清理策略的實(shí)現(xiàn)類圖如圖7所示。

        抽象類ClearStrategy是所有緩存策略類的基類,該類實(shí)現(xiàn)了IClearStrategy接口的SetThreshold和Clear方法,并擴(kuò)展了RemoveItems和RemoveItem方法,為子類實(shí)現(xiàn)了設(shè)置閾值和刪除緩存項(xiàng)的功能。ClearStrategy定義了一個(gè)抽象方法GetOutdatedItems,這個(gè)方法返回List類型的對象,此對象包含需要被清理的緩存項(xiàng)清單。子類只需要重寫GetOutdatedItems方法,根據(jù)自身的清理策略實(shí)現(xiàn)邏輯代碼,獲取并返回要清理的緩存項(xiàng)清單,即可完成緩存清理。

        4 測試

        內(nèi)存緩存機(jī)制的測試基于應(yīng)用了該機(jī)制的智能會議系統(tǒng),并包括以下兩個(gè)部分:

        (1)緩存命中率測試:按照一個(gè)中等規(guī)模會議室(30到50人)設(shè)置數(shù)據(jù)量和緩存參數(shù),對緩存命中率進(jìn)行測試,測試的結(jié)果如圖8所示。根據(jù)測試結(jié)果可以得到,命中率在測試初期較低,隨后快速上升,在300次請求后增速減緩,在850次請求后趨于穩(wěn)定。穩(wěn)定后的命中率在66%左右,即平均每3次數(shù)據(jù)讀取請求可以命中2次,只有1次需要讀取數(shù)據(jù)庫。

        (2)系統(tǒng)響應(yīng)時(shí)間測試:在內(nèi)存緩存機(jī)制開啟和關(guān)閉兩種情況下分別對系統(tǒng)響應(yīng)時(shí)間進(jìn)行測試,并對兩組響應(yīng)時(shí)間進(jìn)行比較。兩種情況下系統(tǒng)響應(yīng)時(shí)間測試的結(jié)果如表1所示。從表中可以看出,內(nèi)存緩存機(jī)制在開啟情況下的響應(yīng)時(shí)間明顯低于關(guān)閉情況。

        5 結(jié)語

        本文基于.NET平臺討論了內(nèi)存緩存機(jī)制的設(shè)計(jì)、實(shí)現(xiàn)及應(yīng)用效果的測試。從測試結(jié)果可以看到,內(nèi)存緩存機(jī)制在命中率方面有不錯(cuò)的表現(xiàn),有效的提高了數(shù)據(jù)的查詢效率,降低了系統(tǒng)的響應(yīng)時(shí)間,實(shí)現(xiàn)了設(shè)計(jì)的目標(biāo)。

        參考文獻(xiàn)

        [1]常廣炎.Memcached分布式緩存系統(tǒng)的應(yīng)用[J].電腦編程技巧與維護(hù),2017,(07):24-25.

        [2]邢蕾.內(nèi)存緩存技術(shù)在門戶網(wǎng)站開發(fā)中的應(yīng)用研究[J].山東工業(yè)技術(shù),2016,(20):152-153.

        [3]胡嘉瑜,華蓓.基于APU的內(nèi)存鍵值緩存系統(tǒng)[J].電子技術(shù),2016,45(09):54-59.

        [4]石磊,黃高攀,喬雄.基于內(nèi)存數(shù)據(jù)庫的索引算法研究[J].信息技術(shù),2016,(11):139-142.

        [5]許春聰,劉釗,文海雄,黃忠主,鄭強(qiáng).基于內(nèi)存的數(shù)據(jù)存儲技術(shù)研究[J].科技與創(chuàng)新,2018,(02):19-21.

        猜你喜歡
        命中率
        基于文獻(xiàn)回顧的罰球命中率與軀干穩(wěn)定性影響因素研究
        第9 屆世界女子大金屬地?cái)S球錦標(biāo)賽單人連續(xù)拋擊技術(shù)運(yùn)用分析
        夜夜“奮戰(zhàn)”會提高“命中率”嗎
        2015男籃亞錦賽四強(qiáng)隊(duì)三分球進(jìn)攻特點(diǎn)的比較研究
        長江叢刊(2018年31期)2018-12-05 06:34:20
        投籃的力量休斯敦火箭
        NBA特刊(2017年8期)2017-06-05 15:00:13
        試析心理因素對投籃命中率的影響
        精品国产乱码久久久久久影片| 亚洲人成在线播放a偷伦| 91福利精品老师国产自产在线| 日日骚一区二区三区中文字幕| 最近中文字幕一区二区三区| 亚洲av中文字字幕乱码软件| 国产无卡视频在线观看| 亚洲天堂精品一区入口| 8x国产精品视频| 无码视频在线观看| 大肉大捧一进一出视频出来呀| 老少交欧美另类| 国产欧美精品区一区二区三区| 精品第一页| 91孕妇精品一区二区三区| 亚洲国产精品第一区二区三区| 亚洲av成人波多野一区二区| 高潮内射主播自拍一区| 欧洲乱码伦视频免费| 亚洲18色成人网站www| 久久免费精品国产72精品剧情| 亚洲一区二区岛国高清| 国产成人无码a在线观看不卡| 成av人片一区二区三区久久| 911国产在线观看精品| 亚洲乱码av一区二区蜜桃av| 曰本女人与公拘交酡| 亚洲日韩欧美国产高清αv | 视频精品熟女一区二区三区| 丰满的少妇av一区二区三区| 国产精品一区二区久久乐下载 | 国产情侣亚洲自拍第一页| 女人和拘做受全程看视频| 欧美整片第一页| 日本黄色高清视频久久| 欧美v国产v亚洲v日韩九九| 丰满人妻被黑人中出849 | 久久无码高潮喷水抽搐| 国产女同舌吻1区2区| 超清精品丝袜国产自在线拍| 国产亚洲AV无码一区二区二三区|