缓存使用经验

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存使用经验相关的知识,希望对你有一定的参考价值。

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

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

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

 

以上是关于缓存使用经验的主要内容,如果未能解决你的问题,请参考以下文章

使用缓存技术10年了,总结了如下经验!

缓存 Redis 在项目中合理使用经验总结

Redis使用经验

ASP.NET缓存策略经验谈

MySQL性能优化的20+条经验

程序员的中年危机,腾讯美团Java面试经验分享,大牛最佳总结