webservice 緩存機制


WebService的緩存分為兩種,一種是簡單的輸出緩存,一種是強大的數據緩存

一、輸出緩存
輸出緩存的使用非常簡單,比較適用於WebService的參數比較少,結果比較單一的情況,並且很少改動的,天氣預報,則可以設置30分鍾甚至數小時的緩存:在WebMethod屬性上指定CacheDuration屬性即可,例如

 這樣,600秒內這個WebService的所有輸出數據都將從緩存中讀取,不會真正做數據處理,如果事務代碼是訪問數據庫的話,現在這種方法就會比每次都訪問數據庫快得多。這種緩存適合初接觸WebService的新手使用。

[WebMethod(Description = “天氣預報”,CacheDuration=600)]
public string Weather()
{
return “weather”;

要注意的是,不是所有服務都適合使用這種緩存,例如每次結果都不一樣的,訪問數極高的服務,緩存將會變得非常大,占用很多服務器的內存,卻沒有實際效果。

二、數據緩存
想將你的WebService某些運行數據保存起來?如果不使用本地的數據庫或者文件,那么緩存是最好的選擇。這種緩存不同於上面提到的輸出緩存,它需要編寫代碼來實現,但是相對應的,它的功能非常強大,可以存放任何類型的信息,並且你可以在任何時候檢索它。

雖然也可以使用Application來模擬緩存,但是這需要你自己管理內存釋放、用戶並發問題,在.net時代已經被拋棄,WebService下的緩存使用Cache這個集合

 

[WebMethod(Description = @"優惠分類或者消費類型")]
[ScriptMethod]
public CorpCategory[] SearchCouponCategory()
{
try
{
CorpCategory[] corpCategory = (CorpCategory[])Utils.CacheManage.GetFromCache("corpCategory");
if (corpCategory == null || corpCategory.Length <= 0)
{
CorpCategoryDao categoryDao = new CorpCategoryDao();
corpCategory = categoryDao.GetCorpCategorys();
Utils.CacheManage.SetCache("corpCategory",corpCategory, 60);
}

return corpCategory;
}
catch (Exception ex)
{
Log.Info("優惠分類:Default —> SearchCouponCategory", ex);
return null;
}
}

public class CacheManage
{
/// <summary>
/// 從緩存獲取
/// </summary>
/// <param name="objectkey"></param>
/// <returns></returns>
public static object GetFromCache(string objectkey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
return objCache[objectkey];
}
/// <summary>
/// 添加到緩存
/// </summary>
/// <param name="objectkey"></param>
/// <param name="objObject"></param>
public static void SetCache(string objectkey, object objObject)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(objectkey, objObject);
}

/// <summary>
/// 添加到緩存
/// </summary>
/// <param name="objectkey"></param>
/// <param name="objObject"></param>
/// <param name="minutes">分鍾</param>
public static void SetCache(string objectkey, object objObject, int minutes)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(objectkey, objObject, null, DateTime.Now.AddMinutes(minutes), TimeSpan.Zero);
}

public static void ClearCache(string objectkey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Remove(objectkey);
}
}

 

 

Cache.Insert方法用於將數據加入緩存。這個方法一共有4種重載,在這個例子中,我們使用的是功能最全面的重載版本,我們以此為例:每一個參數分別是鍵名(使用方法類似於Session)(objectkey),值(objObject),依賴性(null),絕對過期時間(DataTime.MaxValue),可變過期時間( DateTime.Now.AddMinutes(minutes)),緩存優先級,緩存項目刪除時的委托方法絕對過期時間是固定的,此處TimeSpan.Zero表示不使用可變過期。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM