1. 程式人生 > >緩存使用經驗

緩存使用經驗

must turn fun manage 其中 amp per mman erro

緩存操作類:包含創建移除和生成策略的三個方法。其中生成策略在創建緩存中使用

public static class MemoryCacheHelper {

private static readonly Object _locker = new object();

public static T GetCacheItem<T>(String key, Func<T> cachePopulate, TimeSpan? slidingExpiration = null, DateTime? absoluteExpiration = null)

{

if (String.IsNullOrWhiteSpace(key)) throw new ArgumentException("Invalid cache key");

if (cachePopulate == null) throw new ArgumentNullException("cachePopulate");

if (slidingExpiration == null && absoluteExpiration == null) throw new ArgumentException("Either a sliding expiration or absolute must be provided");

if (MemoryCache.Default[key] == null)

{

lock (_locker)

{

if (MemoryCache.Default[key] == null)

{

var item = new CacheItem(key, cachePopulate());

var policy = CreatePolicy(slidingExpiration, absoluteExpiration);

MemoryCache.Default.Add(item, policy);

}

}

}

return (T)MemoryCache.Default[key];

}

private static CacheItemPolicy CreatePolicy(TimeSpan? slidingExpiration, DateTime? absoluteExpiration)

{

var policy = new CacheItemPolicy();

if (absoluteExpiration.HasValue)

{

policy.AbsoluteExpiration = absoluteExpiration.Value;

}

else if (slidingExpiration.HasValue)

{

policy.SlidingExpiration = slidingExpiration.Value;

}

policy.Priority = CacheItemPriority.Default;

return policy;

}

public static bool RemoveCache(string key)

{

bool flag = false;

if (MemoryCache.Default.Contains(key))

{

MemoryCache.Default.Remove(key);

}

return flag;

}

}

使用過程中:

當修改和改變基礎信息時,通過刪除緩存操作。

在其他客戶端中保證正確性方法是:通過設置策略的時間來實現此功能,比如設置30分鐘過期,每次使用緩存的時候,如果過了30分鐘,就會重啟調取數據。這樣會大大降低基礎數據的調取頻率。

在具體使用中:

登錄的時候,

public class PublicCachData {

#region

SystemManageClient ServiceObjVhecmSystemManage = GeneralMethod.SOA_SystemManage();

BaseDataClient ServiceObjBaseData = GeneralMethod.SOA_BaseData();

string _strError=String.Empty;

#endregion

public List<HeatingDistrict> GetHeatingDistrict()

{

List<HeatingDistrict> list=new List<HeatingDistrict>();

list = MemoryCacheHelper.GetCacheItem<List<HeatingDistrict>>("HeatingDistrict", delegate() { return ServiceObjVhecmBaseData.HeatingDistrict_GetModelList(Constant.Pwd, "", ref _strError); }, new TimeSpan(0, 30, 0));

return list;

}

}

使用方法是:當使用基礎信息的時候,通過前端wcf等獲取到list,並存入到緩存中。再次訪問的時候,會檢查緩存是否有效,如果無效,就重新獲取,並存入到cache中。

這種邏輯使用在基礎信息的緩存中

緩存使用經驗