缓存操作类:包含创建移除和生成策略的三个方法。其中生成策略在创建缓存中使用
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中。
这种逻辑使用在基础信息的缓存中