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) { return Add(key, obj, slidingExpiration, absoluteExpiration, false); } /// /// 添加缓存,如果存在则更新 /// /// 添加缓存对象类型 /// 添加对象的key /// 值 /// 相对过期的TimeSpan 如果使用固定时间 =TimeSpan.Zero /// 绝对过期时间 /// 缓存分区db /// 是否添加成功 public bool AddOrUpdate(string key, T obj, TimeSpan slidingExpiration, DateTime? absoluteExpiration = null) { return Add(key, obj, slidingExpiration, absoluteExpiration, true); } /// /// /// /// /// /// /// /// /// /// private static bool Add(string key, T obj, TimeSpan slidingExpiration, DateTime? absoluteExpiration, 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); return true; } return MemoryCache.Default.Add(key, obj, cachePllicy); } /// /// 获取缓存对象 /// /// 获取缓存对象类型 /// key /// 获取指定key对应的值 public T Get(string key) { return (T)MemoryCache.Default.Get(key); } /// /// 移除缓存对象 /// /// /// 是否成功 public bool Remove(string key) { return MemoryCache.Default.Remove(key)!=null; } /// /// 判断是否存在缓存对象 /// /// key值 /// public bool Contains(string key) { return MemoryCache.Default.Contains(key); } } }