码迷,mamicode.com
首页 > 其他好文 > 详细

缓存使用经验

时间:2017-12-20 15:01:11      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:生成   model   body   检查   rem   设置   访问   pwd   eating   

缓存操作类:包含创建移除和生成策略的三个方法。其中生成策略在创建缓存中使用 

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中。

这种逻辑使用在基础信息的缓存中

 

缓存使用经验

标签:生成   model   body   检查   rem   设置   访问   pwd   eating   

原文地址:http://www.cnblogs.com/lvlaozf/p/8072324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!