欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

微軟企業(yè)庫(kù)4.1學(xué)習(xí)筆記(十八)緩存模塊6 緩存

系統(tǒng) 1801 0

  設(shè)計(jì)緩存的目的

  緩存模塊可以用來(lái)實(shí)現(xiàn)下列功能:

  •   提供了一系列的API
  •   它使得開(kāi)發(fā)者不需要學(xué)習(xí)很多內(nèi)部的工作機(jī)制,就可以將常用的緩存功能加入應(yīng)用
  •   使用企業(yè)庫(kù)的配置工具很容易配置
  •   性能高效
  •   線(xiàn)程安全,內(nèi)部的代碼考慮到了在多個(gè)線(xiàn)程調(diào)用,沒(méi)有非預(yù)期的內(nèi)部交互。
  •   使用后端存儲(chǔ),使得發(fā)生以外也可以保持?jǐn)?shù)據(jù)的完整無(wú)缺。
  •   保證了內(nèi)存中的數(shù)據(jù)和后端存儲(chǔ)保持?jǐn)?shù)據(jù)同步。

  本節(jié)講述一些緩存模塊設(shè)計(jì)的亮點(diǎn),和設(shè)計(jì)的細(xì)節(jié)。還包括一些過(guò)期處理的設(shè)計(jì)和掃描處理的設(shè)計(jì)。

  1、設(shè)計(jì)亮點(diǎn)

微軟企業(yè)庫(kù)4.1學(xué)習(xí)筆記(十八)緩存模塊6 緩存的設(shè)計(jì)目的

  上圖顯示的是緩存模塊中關(guān)鍵類(lèi)之間的關(guān)系。

  當(dāng)你用CacheFactory初始化一個(gè)CacheManager對(duì)象的時(shí)候,在內(nèi)部創(chuàng)建了一個(gè)CacheManagerFactory對(duì)象,創(chuàng)建了一個(gè)Cache對(duì)象。常見(jiàn)Cache對(duì)象之后,在后端存儲(chǔ)的所有數(shù)據(jù)被加載到內(nèi)存中,放在Cache對(duì)象中。然后應(yīng)用可以用CacheManager發(fā)出請(qǐng)求,獲取數(shù)據(jù)添加數(shù)據(jù),刪除數(shù)據(jù)。

  當(dāng)應(yīng)用向CacheManager發(fā)送請(qǐng)求,使用GetData方法從緩存中獲取數(shù)據(jù)的時(shí)候,CacheManager對(duì)象會(huì)請(qǐng)求Cache對(duì)象。如果請(qǐng)求項(xiàng)存在的話(huà),返回緩存的數(shù)據(jù),如果不存在返回null,如果對(duì)象過(guò)期,也返回null。

  當(dāng)應(yīng)用使用CacheManager的add方法,向緩存中添加項(xiàng)的時(shí)候,CacheManager同樣將請(qǐng)求發(fā)送給Cache對(duì)象。如果已經(jīng)存在一個(gè)同樣key的項(xiàng)的話(huà),Cache首先會(huì)刪除原來(lái)的項(xiàng),然后加入新項(xiàng)。如果緩存的后端存儲(chǔ)是默認(rèn)的NullBackingStore,數(shù)據(jù)只是寫(xiě)入內(nèi)存。如果添加項(xiàng)的時(shí)候,達(dá)到了緩存存儲(chǔ)數(shù)據(jù)量的上限的話(huà),BackgroundSchedule對(duì)象就會(huì)開(kāi)始掃描,進(jìn)行過(guò)期處理。

  如果添加的項(xiàng)在內(nèi)存緩存中沒(méi)有的話(huà),Cache首先創(chuàng)建一個(gè)復(fù)制品,然后添加到內(nèi)存的hashtable中,然后鎖定內(nèi)存中的項(xiàng),添加項(xiàng)到后端存儲(chǔ),然后替代內(nèi)存hashtable中的項(xiàng)。如果在寫(xiě)入后端存儲(chǔ)的時(shí)候發(fā)生異常,就會(huì)從內(nèi)存緩存中刪除那個(gè)復(fù)制品。緩存模塊擁有很強(qiáng)的異常安全保護(hù),意味著如果加入項(xiàng)的時(shí)候發(fā)生異常,緩存的狀態(tài)可以回滾的添加之前的狀態(tài)。換句話(huà)說(shuō),除非添加項(xiàng)成功,否則緩存的狀態(tài)不會(huì)改變。(同樣也適用于刪除項(xiàng)和清空項(xiàng))

  BackgroundSchedule對(duì)象周期性的監(jiān)測(cè)緩存中的項(xiàng)。當(dāng)一個(gè)項(xiàng)過(guò)期,BackgroundSchedule首先會(huì)移除項(xiàng),然后有可能會(huì)通知應(yīng)用,項(xiàng)被移除。這時(shí)候,應(yīng)用的責(zé)任就是更新緩存。

  2、設(shè)計(jì)細(xì)節(jié)

  CacheManager是一個(gè)接口類(lèi)型,所有的緩存操作都通過(guò)接口調(diào)用。如果開(kāi)發(fā)者沒(méi)有修改直接使用緩存模塊的話(huà),CacheManager對(duì)象提供了訪問(wèn)緩存需要的全部方法,獲取、添加、刪除、清空項(xiàng)。每個(gè)方法都是線(xiàn)程安全的。

  使用CacheFactory類(lèi)創(chuàng)建一個(gè)CacheManager對(duì)象,還會(huì)創(chuàng)建一個(gè)CacheManagerFactory類(lèi)。CacheManagerFactory類(lèi)會(huì)創(chuàng)建實(shí)現(xiàn)一個(gè)CacheManager所需要的內(nèi)部類(lèi)。

  不同的緩存不能共享相同的后端儲(chǔ)存,每個(gè)CacheManager都只能對(duì)應(yīng)一個(gè)后端存儲(chǔ)。Cache對(duì)象接收從CacheManager對(duì)象發(fā)送過(guò)來(lái)的請(qǐng)求,實(shí)現(xiàn)了所有的在內(nèi)存緩存和后端儲(chǔ)存之間的操作。包含了一個(gè)hashtable來(lái)存儲(chǔ)內(nèi)存中對(duì)應(yīng)的數(shù)據(jù),一個(gè)數(shù)據(jù)項(xiàng)作為一個(gè)CacheItem對(duì)象。這個(gè)對(duì)象包括數(shù)據(jù)本身,還包括了項(xiàng)的key,優(yōu)先級(jí),RefreshAction對(duì)象,和過(guò)期策略。這些信息都存放在一個(gè)hashtable中,Cache也是線(xiàn)程安全的。Cache用一個(gè)同步的hashtable控制應(yīng)用和BackgroundSchedule對(duì)緩存中的項(xiàng)的訪問(wèn)。

  BackgroundSchedule對(duì)象的責(zé)任就是進(jìn)行過(guò)期處理,掃描低級(jí)別的項(xiàng)。PollTimer對(duì)象激活過(guò)期循環(huán),一個(gè)數(shù)字是一次掃描處理移除的項(xiàng)目。這些都在配置文件中可以設(shè)置。

  緩存模塊中的緩存存儲(chǔ)類(lèi)包括DataBackingStore、IsolateStorageBackingStore、和NullBackingStore。如果你想要實(shí)現(xiàn)自定義的后端存儲(chǔ),你需要實(shí)現(xiàn)IBackingStore接口,或者是繼承BaseBackingStore類(lèi),這個(gè)類(lèi)也實(shí)現(xiàn)了IBackingStore接口。這個(gè)基類(lèi)包含了實(shí)現(xiàn)任何后端存儲(chǔ)所需要的策略和工具方法。

  當(dāng)后段存儲(chǔ)是使用數(shù)據(jù)庫(kù)的時(shí)候,可以用DataBackingStore類(lèi)。在配置工具中,對(duì)應(yīng)于一個(gè)數(shù)據(jù)庫(kù)實(shí)例的名稱(chēng)。

  DataBackingStroe和IsolatedBackingStore類(lèi)可以在持久化之前加密緩存項(xiàng)。加密緩存項(xiàng)可以通過(guò)配置來(lái)激活。使用配置工具,緩存存儲(chǔ)可以使用配置好的加密算法provider。provider的name在從緩存中讀取數(shù)據(jù),然后在顯示之前解密的時(shí)候同樣需要。

?  過(guò)期策略的設(shè)計(jì)

  緩存模塊的過(guò)期處理是靠BackgroundSchedule來(lái)執(zhí)行的。它會(huì)周期性的檢查hashtable中的緩存項(xiàng),看是否有過(guò)期項(xiàng)。你可以在配置緩存模塊的時(shí)候設(shè)置檢查周期的時(shí)間。

  緩存模塊提供了四個(gè)過(guò)期策略:

  •   Absolute,意味著緩存項(xiàng)在一個(gè)特定的時(shí)間過(guò)期
  •   Sliding,意味著緩存項(xiàng)在最后一次訪問(wèn)之后的固定時(shí)間過(guò)期,默認(rèn)為2分鐘。
  •   Expended format,你可以詳細(xì)描述過(guò)期條件,例如,可以設(shè)定為每個(gè)星期六晚上10:00,或者是每個(gè)月的第三個(gè)星期日。Expended formats在ExpendedFormat.cs文件中列出來(lái)很多。
  •   File dependency,意味著當(dāng)一個(gè)文件被修改,緩存項(xiàng)就過(guò)期

  前三個(gè)過(guò)期選項(xiàng)都是以時(shí)間為基礎(chǔ)的,如果數(shù)據(jù)的更新時(shí)間是規(guī)則的,或者是在一個(gè)特定的時(shí)間更新,你可以使用前三個(gè)選項(xiàng)。

  第四個(gè),文件依賴(lài),是以通知為基礎(chǔ)的。它指定緩存項(xiàng)的過(guò)期依賴(lài)一個(gè)特定的文件,如果文件被修改,緩存項(xiàng)就過(guò)期,就會(huì)刪除緩存項(xiàng)。

  Add方法有兩個(gè)重載,一個(gè)設(shè)置了默認(rèn)的過(guò)期策略,NeverExpired。另外一個(gè)你可以設(shè)置適合自己的過(guò)期策略。你甚至可以設(shè)置自定義的策略,如果你為一個(gè)緩存項(xiàng)設(shè)置了多個(gè)策略,  如果由一個(gè)策略符合條件,緩存項(xiàng)就會(huì)過(guò)期。

  標(biāo)記和清除

  過(guò)期包括兩個(gè)步驟。一個(gè)就是標(biāo)記,另外一個(gè)就是清除。分為兩個(gè)步驟,就是為了避免BackgroundSchedule清除一個(gè)應(yīng)用正在使用的緩存項(xiàng)可能發(fā)生的沖突。

  在標(biāo)記過(guò)程中,BackgroundSchedule會(huì)拷貝一份hashtable,然后檢查里面的每一個(gè)緩存項(xiàng),看看有沒(méi)有過(guò)期的。這時(shí)候會(huì)鎖定緩存項(xiàng),如果發(fā)現(xiàn)過(guò)期的,就會(huì)打個(gè)標(biāo)記。

  在清除過(guò)程中,BackgroundSchedule會(huì)重新檢查緩存項(xiàng)的標(biāo)記,看看在打上標(biāo)記之后是否有訪問(wèn)記錄。如果有訪問(wèn)記錄,就保留緩存項(xiàng)。如果沒(méi)有,就過(guò)期它,刪除它。緩存項(xiàng)過(guò)期的時(shí)候,會(huì)引發(fā)WMI事件。

  回調(diào)callbacks

  開(kāi)發(fā)者可以選擇add方法的另外一個(gè)重載,使得在緩存項(xiàng)過(guò)期,刪除緩存項(xiàng)的時(shí)候發(fā)通知給應(yīng)用,如果有必要,應(yīng)用可以更新緩存。

  掃描處理的設(shè)計(jì)

  緩存模塊的掃描處理也是由BackgroundSchedule執(zhí)行的。在每次有緩存項(xiàng)加入的時(shí)候都會(huì)檢查,緩存項(xiàng)的數(shù)目是否達(dá)到設(shè)置的最大值。數(shù)量是設(shè)置在CacheManager實(shí)例上的。

  當(dāng)加入一個(gè)緩存項(xiàng)的時(shí)候,可以設(shè)置優(yōu)先級(jí),有四個(gè)選項(xiàng):Low,Normal,High,NotRemovable。刪除的時(shí)候會(huì)按照優(yōu)先級(jí)的高低進(jìn)行處理,優(yōu)先級(jí)低的會(huì)先被清除。默認(rèn)值是Normal。

  當(dāng)你想讓一個(gè)緩存項(xiàng)直到它過(guò)期才被清除的話(huà),可以設(shè)置為NotRemovable。最好不要設(shè)置為NotRemovable,因?yàn)榫彺媸怯脕?lái)提升性能的,不應(yīng)該被作為一種持久化手段。

  不想過(guò)期處理包括兩個(gè)過(guò)程,掃描處理只有一個(gè)過(guò)程。

?

?

  未完待續(xù)。。。。。。。。。。。。。。。。。。。。。。

微軟企業(yè)庫(kù)4.1學(xué)習(xí)筆記(十八)緩存模塊6 緩存的設(shè)計(jì)目的


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲 中文 欧美 日韩 在线 | 欧美黑人疯狂性受xxxxx喷水 | 免费自拍偷拍 | 中文字幕在线免费观看 | 小明永久2015www永久免费观看 | 日韩免费精品一级毛片 | 毛片性生活 | 2022国产91精品久久久久久 | 182tv在线观看国产路线一 | 超91视频| 久久免费在线视频 | 91精品观看91久久久久久国产 | 天堂一区二区三区 | 精品亚洲综合在线第一区 | 久草综合网 | 久热国产精品视频 | 欧美一区2区三区4区公司二百 | 欧美日韩在线视频播放 | 国产福利不卡一区二区三区 | 国产精品久久福利新婚之夜 | 午夜视频在线观看免费观看在线观看 | 我的朋友丈夫 | 亚洲免费网 | 亚洲日韩aⅴ在线视频 | 成人av网站在线观看 | 国产精品三级国语在线看 | 蜜臀AV性色A片在线观看 | 亚洲欧美成人综合在线 | 国产成人精品一区二区仙踪林 | 二区三区四区 | 亚洲欧美日韩精品高清 | av在线一区二区三区 | 香蕉久草在线 | 久久成人免费 | 欧美一线免费http | 色淫湿视频 | 免费福利在线观看 | 一本色道精品久久一区二区三区 | 国产成人久久婷婷精品流白浆 | 亚洲精品国产成人 | 欧美专区在线视频 |