日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cache的一些总结

發布時間:2023/12/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cache的一些总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

輸出緩存

這是最簡單的緩存類型,它保存發送到客戶端的頁面副本,當下一個客戶端發送相同的頁面請求時,此頁面不會重新生成(在緩存有限期內),而是從緩存中獲取該頁面;當然由于緩存過期或被回收,這時頁面會重新生成。

我們要實現輸出緩存,只需在頁面中添加如下代碼:

<%@ OutputCache Duration="23" VaryByParam="None" %>

它支持五個屬性,其中兩個屬性Duration和VaryByParam是必填的

Duration

必需屬性。頁面應該被緩存的時間,以秒為單位。必須是正整數。

Location

指定應該對輸出進行緩存的位置。如果要指定該參數,則必須是下列選項之一:Any、Client、Downstream、None、Server 或 ServerAndClient。

VaryByParam

必需屬性。Request 中變量的名稱,這些變量名應該產生單獨的緩存條目。"none" 表示沒有變動。"*" 可用于為每個不同的變量數組創建新的緩存條目。變量之間用 ";" 進行分隔。

VaryByHeader

基于指定的標頭中的變動改變緩存條目。

VaryByCustom

允許在 global.asax 中指定自定義變動(例如,"Browser")。

表1輸出緩存屬性

這里我們把輸出緩存的有效期設置為23秒,也就是說,當緩存超過有效期就會被回收;當用戶再次請求該頁面時,就要重新創建頁面。

前面我們介紹了輸出緩存的使用,只需在頁面中添加OutputCache指令,假設我們要在幾個頁面中添加輸出緩存這可能比較簡單,但我們要在幾十個頁面中添加輸出緩存功能,而且前面介紹的例子中Duration屬性值都是直接Hard code到每個頁面中,如果我們需要修改Duration屬性值,那么就必須修改每個頁面了,ASP.NET還需要重新編譯這些頁面,這不利于我們的維護,最重要的是增加了我們的工作量。

其實,我們可以在web.config文件中定義一個outputCacheProfile(ProductCacheProfile),然后在頁面中添加CacheProfile屬性并且賦值為ProductCacheProfile,web.config文件設置如下:

<caching>

? <!-- Sets out put cache profile-->

? <outputCacheSettings>

??? <outputCacheProfiles>

????? <add name="ProductCacheProfile" duration="30"/>

??? </outputCacheProfiles>

? </outputCacheSettings>

</caching>

現在,我們在頁面中添加CacheProfile屬性,并且設置為ProductCacheProfile,如下所示:

<%@ OutputCache CacheProfile="ProductCacheProfile" VaryByParam="None" %>

客戶端緩存

另一種選擇是客戶端緩存,如果用戶在瀏覽器中點擊“后退”按鈕或在地址欄中重新輸入URL,那么在這種情況下,瀏覽器將從緩存獲取頁面;然而,如果用戶點擊“刷新”按鈕,那么瀏覽器中緩存將失效,瀏覽器發送頁面請求。

如果我們要使用客戶端緩存,只需指定OutputCache中的屬性Location=”Client”就OK了,具體代碼如下所示:

<%@ OutputCache Duration="23" VaryByParam="None" Location="Client" %>

Query String緩存

如果查詢參數和前一個請求相同并且該頁面緩存有效,那么緩存將被重用,否則,創建一個新的頁面緩存。

前面我們把VaryByParam設置為“*”,所以ASP.NET程序對ProductName和ProductId都創建頁面緩存

如果我們只針對ProductName創建頁面緩存,這時我們可以修改VaryByParam,具體如下所示:

<%@ OutputCache Duration="30" VaryByParam="productname" %>

自定義緩存控件

我們可以通過設置VaryByCustom屬性來實現。

假設,現在我們要設計基于不同UserHostName的緩存,由于程序在執行過程中,首先調用全局方法GetVaryByCustomString()來確定是否緩存頁面或重用現有的,所以我們可以通過重寫GetVaryByCustomString()方法實現基于UserHostName的緩存,首先我們創建一個Global.asax文件然后重新全局方法GetVaryByCustomString()具體實現如下:

public override string GetVaryByCustomString(HttpContext context, string custom)

{

??? if (string.Equals(custom, "UserHostName", StringComparison.OrdinalIgnoreCase))

??? {

?????? ?// Indicates that the cache should be vary on user host name.

??????? return Context.Request.UserHostName;

??? }

??? return base.GetVaryByCustomString(context, custom);

}

前面我們重寫了GetVaryByCustomString()方法,使得UserHostName值不同時,獲取相應的緩存值。

然后讓程序基于UserHostName創建緩存,所以我們要在頁面添加以下代碼:

<%@ OutputCache Duration="30" VaryByParam="None" VaryByCustom="UserHostName" %>

我們通過自定義現在GetVaryByCustomString()方法,實現了Web程序根據UserHostName實施不同的緩存方式,其實,我們還可以實現更多種類緩存方案,例如:基于用戶角色、時間和Url等等。

片段緩存

為了實現片段緩存,我們需要創建自定義控件緩存部分頁面,然后我們把OutputCache指令添加到自定義控件中,這樣整個頁面將不會被緩存,而自定義緩存控件除外。

數據緩存

Cache對象是線程安全:這表示無需顯式實現鎖定或解鎖,在添刪Cache對象中的元素,然而,在Cache對象中元素必須是線程安全的。例如,我們創建一個實體Product,而且存在多個客戶端可能同時操作該對象的情況,這時我們必須為實體Product實現鎖定和解鎖操作(同步操作請參考《單例模式(Singleton)的6種實現》)。

Cache對象中的緩存項自動移除:當緩存過期,依賴項被修改或內存不足緩存ASP.NET會自動移除該緩存項。

緩存項支持依賴關系:我們可以給緩存項添加文件、數據庫表或其他資源類型的依賴關系。

緩存的依賴關系

緩存項之間的依賴

ASP.NET Cache允許我們建立緩存之間的依賴關系,即一個緩存項依賴于另一個緩存項;以下示例代碼創建了二個緩存項,并且它們之間建立依賴關系。具體實現如下:

// Creates cache object Key1.

Cache["Key1"] = "Cache Item 1";

?

// Makes Cache["Key2"] dependent on Cache["Key1"].

string[] dependencyKey = new string[1];

dependencyKey[0] = "Key1";

?

// Creates a CacheDependency object.

CacheDependency dependency = new CacheDependency(null, dependencyKey);

?

// Establishs dependency between cache Key1 and Key2.

Cache.Insert("Key2", "Cache Item 2", dependency);

現在,當Key1緩存項更新或從緩存中刪除,Key2緩存項就會自動從緩存刪除。

文件依賴

前面我們介紹了緩存項之間的依賴關系,ASP.NET Cache還提供緩存項與文件之間的依賴關系,當文件被更新或刪除對應的緩存項也將失效

?

轉載于:https://www.cnblogs.com/sylone/p/7347286.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Cache的一些总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。