web中緩存(cún)的使用(yòng)
很多人都知道什麽(me)叫緩存,甚至學習過,但用起(qǐ)來還真難用。我經過幾(jǐ)天的學習cache想(xiǎng)跟大家(jiā)分享和討論。
我是帶著(zhe)疑問去學習的。緩存是用在什麽地方,有什麽好處。
緩存就是把獲取的數據暫時存到緩存中,當獲取的數據沒有變化時就還是用緩存裏的東西。可(kě)能有人會問怎麽判斷獲取(qǔ)的數據(jù)沒有變化?這個等下會說到。這樣從緩存數據可是獲(huò)取數據速度快很多,但(dàn)要求數(shù)據不時時常變化的。像博客園(yuán)裏的博客排行榜,基本沒變化,這是雖是數據不怎麽變化,但這樣頁麵每個人瀏覽都是一樣的東西,那又何必用緩存幹什麽呢?直接把此頁麵生成html,這樣打開的速度比用緩存還快。
當一(yī)個頁麵既有公共部分(每個人瀏覽的都一樣)又有個性部分(自(zì)己(jǐ)的信息)。比如當當網裏就有個購物車當你購完物時,底單上麵有推薦買的產(chǎn)品(這也產品可能一天換一次),當然推薦的產品跟你買的產品有(yǒu)關,此時不能生成html了(le),因為不是每個人瀏(liú)覽此(cǐ)頁(yè)麵都相同,隻有當用戶(hù)買的產品相關到推薦的產(chǎn)品相同時。此(cǐ)時就要用緩存存此推薦產品(pǐn)的數據,當然這個緩存鍵值是跟買的產品有關,隻要買的產品相關得到的推薦產品(這裏麵有一種關係在裏(lǐ)麵)才能該緩存的東西。
打個比方:當(dāng)你買書時就會推薦其他好書給你(nǐ),此時買(mǎi)書的推薦書都一樣,調用的緩存都一樣,而買電腦的話(huà)可能會推薦你(nǐ)各種好電腦(nǎo)給你,這時調(diào)用推薦電腦的緩存。
上(shàng)麵可能講了下緩存用在什麽(me)地方,當然我隻(zhī)知道這種情況,可能還有其他情況,那位知道可評論下。
緩存的好(hǎo)處當然是減輕服務器的負擔,加快瀏覽速度。但如果緩存(cún)用得不好(hǎo),可能得到的數據是過時(shí)的,或者反而使瀏覽熟讀更慢。(當你緩存經常變化(huà)的數據時)
緩存有分客戶端緩存服務器端緩存嗎?
兩個都有,隻是客戶端緩存內嵌在瀏覽(lǎn)器中,基本上是瀏覽器自動處(chù)理緩存。
客(kè)戶端緩存可以有效地減輕服務器端負(fù)載。首先了解一下 HTTP 頭:Last-Modified 與 If-Modified-Since。簡單(dān)的說,Last-Modified 與If-Modified-Since 都是用於記錄頁麵最後修改時(shí)間的 HTTP 頭信息,隻是 Last-Modified 是由服務器往客戶端發送的 HTTP 頭,而 If-Modified-Since 則是由客戶端往服務器發送的(de)頭實現。
在瀏覽器可設置瀏覽器如何使用緩存(cún)的。一般默認是自(zì)動。操(cāo)作步(bù)驟如下:
工具-》internet選項-》常規-》設置-》檢(jiǎn)查網頁的較(jiào)新(xīn)版本中有(yǒu)四個選項來控製(zhì)緩存的運用
當然代碼可(kě)控製客戶(hù)端緩存,比如比想要瀏覽器緩存東西可用下麵代碼
html禁(jìn)用(yòng)客戶端緩(huǎn)存
以(yǐ)下為引用的內容: <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalsidate"> <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1978 08:21:57 GMT"> |
C#中禁止cache的方法!
以下(xià)為引用的內容: Response.Buffer = true; Response.ExpiresAbsolute=System.DateTime.Now.AddSeconds(-1); Response.Expires=0; Response.CacheControl="no-cache"; |
我對客戶(hù)端緩存知道太少,而且我們寫程序也很少(shǎo)寫客戶端緩存, 希望有人提供更多關於客(kè)戶端緩存的東西。
服務端緩存有System.Web.Caching.cahe和memcached
當然System.Web.Caching.cahe是微軟寫的類,而memcached是第三方插件(jiàn)。System.Web.Caching.cache目前還不是分布式緩存(cún),隻能在(zài)一台電(diàn)腦上(07時候),而
memcached是分布式的高速緩存。
服務(wù)器緩存可分為三種緩存
1.輸(shū)出緩存:
要實現(xiàn)頁麵輸出緩(huǎn)存,隻要將(jiāng)一(yī)條 OutputCache 指令添加到(dào)頁(yè)麵即可。
<%@ OutputCache Duration="60" VaryByParam="*" %>
如同其他頁麵指令一(yī)樣,該(gāi)指令應該出現在(zài) ASPX 頁麵的頂部,即在任何輸出之前。它支持五個屬性(或參數),其中兩個是必需的(de)。
Duration
必需屬性。頁麵應該被緩存的時間,以秒為(wéi)單位。必須是正整數。
locations
指定(dìng)應該對輸出進行緩存的位(wèi)置。如(rú)果(guǒ)要指定該參數,則必須是下列選項之一:Any、Client、Downstream、None、Server 或 ServerAndClient。
VaryByParam
必需屬性。Request 中變量的(de)名稱,這些變量名應該(gāi)產(chǎn)生單獨的緩(huǎn)存條目(mù)。“none” 表(biǎo)示(shì)沒有(yǒu)變動。“*” 可用於為每個不同的變(biàn)量數組創建(jiàn)新的(de)緩存條(tiáo)目。變量之間用 “;” 進行(háng)分隔。
VaryByHeader
基於指定的標頭中的變動改(gǎi)變緩存條目。
VaryByCustom
允許在 global.asax 中指(zhǐ)定(dìng)自定義變動(例如(rú),“Browser”)。
2.片段緩存:
示例
<%@ OutputCache Duration="60" VaryByParam="*" %> 該示例將(jiāng)緩存用戶控件60秒,並且將針對查詢字符串的每個變動、針對此控件所在的每個頁(yè)麵創建單獨(dú)的緩存條(tiáo)目。<%@ OutputCache Duration="60" VaryByParam="none"
VaryByControl="CategoryDropDownList" %> 該示例將緩存用戶(hù)控件60秒,並且將針(zhēn)對CategoryDropDownList控件的每個不同(tóng)的值、針對此控件所在的每個頁麵創建單獨的緩存條目。<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser"
Shared="true" %>
最後,該示例將緩存用戶控(kòng)件60秒,並且將針對每個(gè)瀏覽器名稱和主要版本創建一個緩存條目。然(rán)後,每個瀏(liú)覽器的緩存條目將由引用此用戶控件(jiàn)的所有頁麵共享(隻要所有頁麵都用相同的ID引用該控件即可)。
3.編程用得最多的緩存:數據緩(huǎn)存
System.Web.Caching.cahe被httpRuntime.Cache或HttpContext.Current.Cache實例化。httpRuntime.Cache,HttpContext.Current.Cache是內置(zhì)對象就想(xiǎng)當與seesion。
HttpContext.Current.Cache與HttpRuntime.Cache區別:
HttpContext.Current.Cache:為當前 HTTP 請求獲取(qǔ)Cache對象。 HttpRuntime.Cache:獲取當前應用程序的Cache。HttpContext.Current.Cache是調用了 HttpRuntime.Cache,且HttpContext.Current.Cache是用在web程序上(shàng),而HttpRuntime.Cache是用在任何程(chéng)序上。System.web命名空間下。
其實HttpContext.Current.Cache是通(tōng)過 HttpRuntime.Cache來實現的,所以(yǐ)一般實例化最好通過HttpRuntime.Cache來實例化:
例如:System.Web.Caching.Cache cache = HttpRuntime.Cache
System.Web.Caching.Cache有(yǒu)很多方法,但方法(fǎ)中(zhōng)add中(zhōng)是(shì)存緩存
參數中有緩存時間,依賴(lài)項。
緩存時間即到當緩(huǎn)存(cún)的東西達到指定時間就讓(ràng)緩存失效,而依賴項是當依賴項發生變化就會使緩存失效。
依(yī)賴項有一般(bān)依賴項 CacheDependency和數據庫依賴項SqlCacheDependency。
雖然CacheDependency類(lèi)完成了很重要的(de)功能,但其組成結構卻比較簡單,主要(yào)有兩個(gè)屬性和一個方(fāng)法。
— 屬性“HasChanged”:判斷CacheDependency對象(xiàng)是否已更改。
— 屬性(xìng)“UtcLastModified”:返(fǎn)回上次依賴項的修改日期(qī)
— 方法“Dispose”:釋(shì)放(fàng)CacheDependency對象所占有的資源。因為緩存類繼承了(le)接(jiē)口“IDispose”,所以必須實(shí)現此方法。
CacheDependency
例如 Cache.Insert(“key”, myXMLFileData, DateTime.Now.AddMinutes(1),,new
System.Web.Caching.CacheDependency(Server.MapPath(“users.xml”)));
users.xml文件就相(xiàng)當一般依賴項,當xml文件被改了,則此緩存失效。
SqlCacheDependency一般是增對數據庫的,這個設置(zhì)需要在(zài)config裏設置,而且還要啟(qǐ)動數據庫的這樣服(fú)務。
Cache.Insert 中可設置跟數據庫中那個表關聯,一旦表有變化就會導(dǎo)致cache失效。
可到網上查詢如何使用
關(guān)鍵詞:web
閱讀本文後您有什(shí)麽感想? 已有 人給出評價!
- 0
- 0
- 0
- 0
- 0
- 0