62,046
社区成员
发帖
与我相关
我的任务
分享
public static class CacheHelper
{
private static ObjectCache Cache
{
get
{
return MemoryCache.Default;
}
}
public static T Get<T>(string key)
{
return (T)Cache[key];
}
/// <summary>
/// 添加缓存(绝对过期)
/// </summary>
/// <param name="key"></param>
/// <param name="data">要缓存的数据</param>
/// <param name="cacheTime">要缓存时间,分钟</param>
public static void Add(string key, object data, int cacheTime)
{
if (data == null)
return;
var policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(cacheTime);
Cache.Add(new CacheItem(key, data), policy);
}
/// <summary>
/// 添加缓存(滑动过期)
/// </summary>
/// <param name="key"></param>
/// <param name="data">要缓存的数据</param>
/// <param name="cacheTime">要缓存时间,分钟</param>
public static void AddBySE(string key, object data, int cacheTime)
{
if (data == null)
return;
var policy = new CacheItemPolicy();
policy.SlidingExpiration = TimeSpan.FromMinutes(cacheTime);
Cache.Add(new CacheItem(key, data), policy);
}
/// <summary>
/// 判断一个指定键是否有对应的缓存与之想关联
/// </summary>
/// <param name="key">key</param>
/// <returns>Result</returns>
public static bool IsContains(string key)
{
return (Cache.Contains(key));
}
/// <summary>
/// 指定的键从缓存中删除值
/// </summary>
/// <param name="key">key</param>
public static void Remove(string key)
{
Cache.Remove(key);
}
/// <summary>
/// 清除所有缓存数据
/// </summary>
public static void Clear()
{
foreach (var item in Cache)
Remove(item.Key);
}
}
//下面是我将省市区放进缓存
IList<Region> RegionsCache()
{
const string key = "AllRegionsKey_2013-04-23 22:34:24";//缓存的键值,就如同字典
if (!CacheHelper.IsContains(key))//判断键值是否存在缓存中
{
var data = _regionRepository.Table.ToList();//从数据库拿数据~
CacheHelper.Add(key, data, 30);//将数据放进缓存~ 30分钟后过期~这是一个策略,
//不断地调用的情况下 每30分钟从数据库更新数据,没有调用那么30分钟后就释放内存了~ 我描述的不够好
}
return CacheHelper.Get<List<Region>>(key);//从缓存中取出数据~
}
public void Search()
{
var result = RegionsCache().Where(x=>x.)//就可以用Linq来做各种查询了~
}