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); } } }