国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

ASP.NET 2.0的緩存技術(shù)

2024-07-10 13:06:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  • 本文來(lái)源于網(wǎng)頁(yè)設(shè)計(jì)愛(ài)好者web開(kāi)發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪(fǎng)問(wèn)。
  •      由數(shù)據(jù)庫(kù)驅(qū)動(dòng)的web應(yīng)用程序,如果需要改善其性能,最好的方法是使用緩存功能。用戶(hù)從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù),可能是web應(yīng)用程序中執(zhí)行最慢的操作之一。因?yàn)槠渲猩婕岸鄠€(gè)環(huán)節(jié),例如,web服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器等。尤其是在用戶(hù)比較多,檢索的數(shù)據(jù)量比較大的情況下,會(huì)給包括用戶(hù)在內(nèi)的各個(gè)方面造成不小的困難。如果能夠?qū)?shù)據(jù)庫(kù)中的數(shù)據(jù)緩存到內(nèi)存(也可以存儲(chǔ)在其他場(chǎng)所),則無(wú)需在請(qǐng)求每個(gè)頁(yè)面時(shí)都訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。由于從內(nèi)存中返回?cái)?shù)據(jù)的速度始終比新提供的數(shù)據(jù)速度快,因而可以大大提供應(yīng)用程序的性能。
      
      
      緩存有一個(gè)不太容易克服的缺點(diǎn),那就是數(shù)據(jù)過(guò)期的問(wèn)題。最典型的情況是,如果將數(shù)據(jù)庫(kù)表中的數(shù)據(jù)內(nèi)容緩存到服務(wù)器內(nèi)存中,當(dāng)數(shù)據(jù)庫(kù)表中的記錄發(fā)生更改時(shí),web應(yīng)用程序則很可能顯示過(guò)期的、不準(zhǔn)確的數(shù)據(jù)。對(duì)于某些類(lèi)型的數(shù)據(jù),即使顯示的信息過(guò)期,影響也不會(huì)很大。然而,對(duì)于實(shí)時(shí)性要求比較嚴(yán)格的數(shù)據(jù),例如,股票價(jià)格、拍賣(mài)出價(jià)之類(lèi)信息,顯示的數(shù)據(jù)稍有過(guò)期都是不可接受的。
      
      
      為了解決以上問(wèn)題,asp.net 1.x中曾經(jīng)提供了一些比較好的緩存功能,例如,頁(yè)面輸出緩存、部分緩存、頁(yè)面數(shù)據(jù)緩存等。雖然這些緩存功能可以解決數(shù)據(jù)緩存方面的問(wèn)題,但還是存在較大的缺點(diǎn),開(kāi)發(fā)人員必須在性能和數(shù)據(jù)過(guò)期之間作出權(quán)衡,數(shù)據(jù)過(guò)期的問(wèn)題始終困擾著開(kāi)發(fā)人員。例如,如果數(shù)據(jù)庫(kù)表中的數(shù)據(jù)發(fā)生了變化,緩存則也許不能在指定的時(shí)間內(nèi)更新,而必須等到緩存過(guò)期,那么就有可能為用戶(hù)帶來(lái)一定的麻煩。理想的情況是,數(shù)據(jù)庫(kù)表中的任何更新,都能夠立刻體現(xiàn)在緩存數(shù)據(jù)中,asp.net 2.0克服了以上不足,解決了這個(gè)問(wèn)題。asp.net 2.0的緩存功能是在asp.net 1.x基礎(chǔ)之上擴(kuò)展而來(lái)的。
      
      
      asp.net 2.0支持以下幾種緩存
      
      
      ·頁(yè)面輸出緩存
      
      
      頁(yè)面輸出緩存是最為簡(jiǎn)單的緩存機(jī)制,該機(jī)制將整個(gè)asp.net頁(yè)面內(nèi)容保存在服務(wù)器內(nèi)存中。當(dāng)用戶(hù)請(qǐng)求該頁(yè)面時(shí),系統(tǒng)從內(nèi)存中輸出相關(guān)數(shù)據(jù),直到緩存數(shù)據(jù)過(guò)期。在這個(gè)過(guò)程中,緩存內(nèi)容直接發(fā)送給用戶(hù),而不必再次經(jīng)過(guò)頁(yè)面處理生命周期。通常情況下,頁(yè)面輸出緩存對(duì)于那些包含不需要經(jīng)常修改內(nèi)容的,但需要大量處理才能編譯完成的頁(yè)面特別有用。需要讀者注意的是,頁(yè)面輸出緩存是將頁(yè)面全部?jī)?nèi)容都保存在內(nèi)存中,并用于完成客戶(hù)端請(qǐng)求。
      
      
      ·頁(yè)面部分緩存
      
      
      顧名思義,頁(yè)面部分緩存是將頁(yè)面部分內(nèi)容保存在內(nèi)存中以便響應(yīng)用戶(hù)請(qǐng)求,而頁(yè)面其他部分內(nèi)容則為動(dòng)態(tài)內(nèi)容。頁(yè)面部分緩存的實(shí)現(xiàn)包括兩種方式:控件緩存和替換后緩存。前者也可稱(chēng)為片段緩存,這種方式允許將需要緩存的信息包含在一個(gè)用戶(hù)控件內(nèi),然后,將該用戶(hù)控件標(biāo)記為可緩存的,以此來(lái)緩存頁(yè)面輸出的部分內(nèi)容。這一方式緩存了頁(yè)面中的特定內(nèi)容,而沒(méi)有緩存整個(gè)頁(yè)面,因此,每次都需重新創(chuàng)建整個(gè)頁(yè)。例如,如果要?jiǎng)?chuàng)建一個(gè)顯示大量動(dòng)態(tài)內(nèi)容(如股票信息)的頁(yè),其中有些部分為靜態(tài)內(nèi)容(如每周總結(jié)),這時(shí)可以將靜態(tài)部分放在用戶(hù)控件中,并允許緩存這些內(nèi)容。緩存后替換與控件緩存正好相反。這種方式緩存整個(gè)頁(yè),但頁(yè)中的各段都是動(dòng)態(tài)的。例如,如果要?jiǎng)?chuàng)建一個(gè)在規(guī)定時(shí)間段內(nèi)為靜態(tài)的頁(yè),則可以將整個(gè)頁(yè)設(shè)置為進(jìn)行緩存。如果向頁(yè)添加一個(gè)顯示用戶(hù)名的label控件,則對(duì)于每次頁(yè)刷新和每個(gè)用戶(hù)而言,label的內(nèi)容都將保持不變,始終顯示緩存該頁(yè)之前請(qǐng)求該頁(yè)的用戶(hù)的姓名。使用緩存后替換機(jī)制,可以將頁(yè)配置為進(jìn)行緩存,將頁(yè)的個(gè)別部分標(biāo)記為不可緩存。在此情況下,可以向不可緩存部分添加label控件,這樣將為每個(gè)用戶(hù)和每次頁(yè)請(qǐng)求動(dòng)態(tài)創(chuàng)建這些控件。
      
      
      ·應(yīng)用程序數(shù)據(jù)緩存
      
      
      應(yīng)用程序數(shù)據(jù)緩存提供了一種編程方式,可通過(guò)鍵/值對(duì)將任意數(shù)據(jù)存儲(chǔ)在內(nèi)存中。使用應(yīng)用程序緩存與使用應(yīng)用程序狀態(tài)類(lèi)似。但是,與應(yīng)用程序狀態(tài)不同的是,應(yīng)用程序數(shù)據(jù)緩存中的數(shù)據(jù)是易失的,即數(shù)據(jù)并不是在整個(gè)應(yīng)用程序生命周期中都存儲(chǔ)在內(nèi)存中。應(yīng)用程序數(shù)據(jù)緩存的優(yōu)點(diǎn)是由asp.net管理緩存,它會(huì)在項(xiàng)過(guò)期、無(wú)效,或內(nèi)存不足時(shí)移除緩存中的項(xiàng),還可以配置應(yīng)用程序緩存,以便在移除項(xiàng)時(shí)通知應(yīng)用程序。
      
      
      ·緩存依賴(lài)
      
      
      asp.net 1.x已經(jīng)提供了一些基于時(shí)間、文件、目錄等緩存依賴(lài)功能。這些功能雖然能夠處理一些常見(jiàn)問(wèn)題,但是無(wú)法解決數(shù)據(jù)過(guò)期的難題。為此,asp.net 2.0新增了sql數(shù)據(jù)緩存依賴(lài)功能。該功能的核心是sqlcachedependency類(lèi)。不同版本的sql server,其對(duì)于sql數(shù)據(jù)緩存依賴(lài)具有不同程度的支持,因此,使用方法差異較大。另外,asp.net 2.0還支持以cachedependency類(lèi)為核心的自定義緩存依賴(lài),以及以aggregatecachedependency類(lèi)為核心的聚合緩存依賴(lài)等。
      
      
      asp.net 2.0包括了一些有助于進(jìn)行緩存配置的新功能。例如,允許使用web.config文件來(lái)創(chuàng)建緩存設(shè)置。在web.config文件中進(jìn)行適當(dāng)設(shè)置,并在單個(gè)頁(yè)中引用這些設(shè)置后,就能夠?qū)⒕彺嬖O(shè)置同時(shí)應(yīng)用于多個(gè)頁(yè)面。同時(shí),緩存設(shè)置還添加了更多用于自定義緩存性能的選項(xiàng)。
      
      
      以上簡(jiǎn)單介紹了asp.net 2.0提供的緩存功能,它們能夠提高請(qǐng)求響應(yīng)的吞吐量以便提高應(yīng)用程序性能。實(shí)際上,這些緩存功能有的繼承自asp.net 1.x,并且得到了增強(qiáng),有的則是新增功能。增強(qiáng)功能包括功能更強(qiáng)大的頁(yè)面部分緩存模型、增強(qiáng)的緩存配置以及輸出緩存指令的改進(jìn)。新功能包括web.config緩存配置支持、自定義緩存依賴(lài)、聚合緩存依賴(lài)、sql數(shù)據(jù)緩存依賴(lài)以及緩存后替換等。
      
      
      在正式開(kāi)始介紹以上各個(gè)緩存功能之前,還有兩個(gè)概念需要了解。一個(gè)是緩存清除,另一個(gè)是緩存過(guò)期。
      
      
      緩存清除是指從內(nèi)存中移除緩存數(shù)據(jù)。可能由以下3個(gè)原因造成:一是緩存項(xiàng)數(shù)據(jù)過(guò)期。每個(gè)過(guò)期的緩存項(xiàng)數(shù)據(jù)都必須被刪除,否則導(dǎo)致服務(wù)器內(nèi)存不足,影響其他應(yīng)用程序執(zhí)行。二是緩存依賴(lài)項(xiàng)發(fā)生改變。依賴(lài)項(xiàng)與數(shù)據(jù)緩存項(xiàng)有著密切關(guān)系。根據(jù)應(yīng)用程序設(shè)置,如果依賴(lài)項(xiàng)發(fā)生改變,那么數(shù)據(jù)緩存很可能會(huì)被清除。三是由于服務(wù)器內(nèi)存不足,開(kāi)始緩存清理過(guò)程。如果某些項(xiàng)在一段時(shí)間內(nèi)未被訪(fǎng)問(wèn),或是在添加到緩存中時(shí)被標(biāo)記為低優(yōu)先級(jí),則這些項(xiàng)會(huì)被移除。
      
      
      以上介紹了緩存清除的概念和形成原因,其中涉及一個(gè)數(shù)據(jù)過(guò)期的問(wèn)題。在asp.net 2.0中,當(dāng)向緩存添加項(xiàng)時(shí),可以設(shè)置兩種數(shù)據(jù)過(guò)期類(lèi)型。一種稱(chēng)為可調(diào)過(guò)期,即指定某項(xiàng)自上次被訪(fǎng)問(wèn)后多長(zhǎng)時(shí)間過(guò)期。例如,可以將某項(xiàng)設(shè)置為自上次在緩存中被訪(fǎng)問(wèn)后20分鐘過(guò)期。另一種是絕對(duì)過(guò)期,即指定某項(xiàng)在設(shè)定的時(shí)間過(guò)期,而不考慮訪(fǎng)問(wèn)頻率。例如,可以將某項(xiàng)設(shè)置為在下午6點(diǎn)過(guò)期,或4小時(shí)后過(guò)期。
      
      
      asp.net 2.0的緩存功能具有以下優(yōu)點(diǎn):
      
      
      ·支持更為廣泛和靈活的可開(kāi)發(fā)特征
      
      
      asp.net 2.0包含一些新增的緩存控件和api。例如,自定義緩存依賴(lài)、substitution控件、頁(yè)面輸出緩存api等,這些特征能夠明顯改善開(kāi)發(fā)人員對(duì)于緩存功能的控制。
      
      
      ·增強(qiáng)的可管理性
      
      
      使用asp.net 2.0提供的配置和管理功能,可以更加輕松地管理緩存功能。
      
      
      ·提供更高的性能和可伸縮性
      
      
      asp.net 2.0提供了一些新的功能,例如,sql數(shù)據(jù)緩存依賴(lài)等,這些功能將幫助開(kāi)發(fā)人員創(chuàng)建高性能、伸縮性強(qiáng)的web應(yīng)用程序。
      
      
      另外,緩存功能也有其自身的不足。例如,顯示的內(nèi)容可能不是最新、最準(zhǔn)確的,為此,必須設(shè)置合適的緩存策略。又如,緩存增加了系統(tǒng)的復(fù)雜性并使其難于測(cè)試和調(diào)試,因此建議在沒(méi)有緩存的情況下開(kāi)發(fā)和測(cè)試應(yīng)用程序,然后在性能優(yōu)化階段啟用緩存選項(xiàng)。 
    發(fā)表評(píng)論 共有條評(píng)論
    用戶(hù)名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 江永县| 宁夏| 信阳市| 和静县| 衢州市| 潜山县| 丰城市| 宜宾县| 林口县| 那坡县| 沿河| 西和县| 红河县| 拉萨市| 鹤庆县| 马龙县| 定安县| 河南省| 油尖旺区| 屏东市| 彝良县| 密山市| 纳雍县| 松阳县| 黄龙县| 贵溪市| 交城县| 珲春市| 哈密市| 科技| 平山县| 兴和县| 高尔夫| 禹州市| 东乌珠穆沁旗| 海林市| 宜昌市| 丹巴县| 高清| 嘉义县| 天镇县|