1、首先對於本地內存緩存,就是把數據緩存在本機的內存中,如下圖1所示:
2、 分布式緩存機制:可能存在跨進程,跨域訪問緩存數據
對於分布式的緩存,此時因為緩存的數據是放在緩存服務器中的,或者說,此時應用程序需要跨進程的去訪問分布式緩存服務器,如圖2:
當我們在應用中使用跨進程的緩存機制,例如分布式緩存memcached或者微軟的AppFabric,此時數據被緩存在應用程序之外的進程中。每次,當我們要把一些數據緩存起來的時候,緩存的API就會把數據首先序列化為字節的形式,然后把這些字節發送給緩存服務器去保存。同理,當我們在應用中要再次使用緩存的數據的時候,緩存服務器就會將緩存的字節發送給應用程序,而緩存的客戶端類庫接受到這些字節之后就要進行反序列化的操作了,將之轉換為我們需要的數據對象。
另外還有需要注意的就是:
這個序列化與反序列化的機制都是發生在應用程序服務器上的,而緩存服務器只是負責保存而已。
.NET中的默認使用的序列化機制不是最優的,因為它要使用反射機制,而反射機制是是非常耗CPU的,特別是當我們緩存了比較復雜的數據對象的時候。
一般而言,緩存機制都是會設置絕對過期時間與相對過期時間
3.時間設定
3.1. 設定絕對過期時間
/// <summary> /// 設定絕對的過期時間 /// </summary> /// <param name="CacheKey"></param> /// <param name="objObject"></param> /// <param name="seconds">超過多少秒后過期</param> public static void SetCacheDateTime(string CacheKey, object objObject, long Seconds) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject, null, System.DateTime.Now.AddSeconds(Seconds), TimeSpan.Zero); }
3.2.設定相對過期時間
/// <summary> /// 設置當前應用程序指定包含相對過期時間Cache值 /// </summary> /// <param name="CacheKey"></param> /// <param name="objObject"></param> /// <param name="timeSpan">超過多少時間不調用就失效,單位是秒</param> public static void SetCacheTimeSpan(string CacheKey, object objObject,long timeSpan) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject, null, DateTime.MaxValue, TimeSpan.FromSeconds(timeSpan)); }
鏈接:http://www.infoq.com/cn/articles/misunderstanding-using-cache/
http://www.cnblogs.com/wuyifu/p/3956476.html