緩存使用經驗
緩存操作類:包含創建移除和生成策略的三個方法。其中生成策略在創建緩存中使用
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中。
這種邏輯使用在基礎信息的緩存中
緩存使用經驗