using System;
using System.Runtime.Caching;
namespace OS.Common.Modules.CacheModule
{
///
///
///
public class Cache : ICache
{
///
/// 添加缓存,已存在不更新
///
/// 添加缓存对象类型
/// 添加对象的key
/// 值
/// 相对过期的TimeSpan
/// 绝对过期时间
/// 缓存分区db
/// 是否添加成功
public bool Add(string key, T obj, TimeSpan slidingExpiration, DateTime? absoluteExpiration = null,
int db = 0)
{
return Add(key, obj, slidingExpiration, absoluteExpiration, db, false);
}
///
/// 添加缓存,如果存在则更新
///
/// 添加缓存对象类型
/// 添加对象的key
/// 值
/// 相对过期的TimeSpan 如果使用固定时间 =TimeSpan.Zero
/// 绝对过期时间
/// 缓存分区db
/// 是否添加成功
public bool AddOrUpdate(string key, T obj, TimeSpan slidingExpiration, DateTime? absoluteExpiration = null,
int db = 0)
{
return Add(key, obj, slidingExpiration, absoluteExpiration, db, true);
}
///
///
///
///
///
///
///
///
///
///
///
private static bool Add(string key, T obj, TimeSpan slidingExpiration, DateTime? absoluteExpiration,
int db, bool isUpdate)
{
if (slidingExpiration == TimeSpan.Zero && absoluteExpiration == null)
throw new ArgumentNullException("slidingExpiration", "缓存过期时间不正确,需要设置固定过期时间或者相对过期时间");
var cachePllicy = new CacheItemPolicy();
if (slidingExpiration == TimeSpan.Zero)
{
cachePllicy.AbsoluteExpiration = new DateTimeOffset(absoluteExpiration.Value);
}
else
{
cachePllicy.SlidingExpiration = slidingExpiration;
}
if (isUpdate)
{
MemoryCache.Default.Set(key, obj, cachePllicy, db>0? db.ToString():null);
return true;
}
return MemoryCache.Default.Add(key, obj, cachePllicy, db>0? db.ToString():null);
}
///
/// 获取缓存对象
///
/// 获取缓存对象类型
/// key
/// 缓存分区db
/// 获取指定key对应的值
public T Get(string key, int db=0)
{
return (T)MemoryCache.Default.Get(key, db>0? db.ToString():null);
}
///
/// 移除缓存对象
///
///
///
/// 是否成功
public bool Remove(string key, int db=0)
{
return MemoryCache.Default.Remove(key, db>0? db.ToString():null)!=null;
}
///
/// 判断是否存在缓存对象
///
/// key值
/// 缓存分区db
///
public bool Contains(string key, int db=0)
{
return MemoryCache.Default.Contains(key, db>0? db.ToString():null);
}
}
}