using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.Caching; using System.Collections; namespace MyCode.Project.Infrastructure.Cache { public class SystemCache : IMyCodeCacheService { private static System.Web.Caching.Cache cache; public static Dictionary dicQueue; public static Dictionary dicIncr; public SystemCache() { if (cache == null) { cache = HttpRuntime.Cache; dicQueue = new Dictionary(); dicIncr = new Dictionary(); } } #region Set(设置绝对过期时间) public void Set(string key, object cache_object, TimeSpan? cacheTime = null) { if (cacheTime == null || cacheTime.Value == TimeSpan.Zero) { cacheTime = new TimeSpan(0, 0, 30); } //相对时间过期 //cache.Insert(key,cache_object,null, System.Web.Caching.Cache.NoAbsoluteExpiration,expiration,priority,null); //绝对时间过期 //cache.Insert(key, cache_object, null,DateTime.Now.addti,expiration, System.Web.Caching.Cache.NoSlidingExpiration); //var second = expiration.TotalSeconds; if (cache_object == null) { return; } cache.Insert(key, cache_object, null, DateTime.Now.AddSeconds(cacheTime.Value.TotalSeconds), System.Web.Caching.Cache.NoSlidingExpiration); } #endregion #region KeyExpire(设置缓存有效时长)(系统缓存无执行效果) /// /// 设置缓存有效时长(系统缓存无执行效果) /// /// /// public void KeyExpire(string key, TimeSpan? expiry) { } #endregion #region Get(根据key得到缓存值) public object Get(string key) { return cache.Get(key); } #endregion #region Get(获取一个具体的对象) public T Get(string key) { var obj = Get(key); return (T)obj; } #endregion #region Delete(按Key删除) public void Delete(string key) { if (Exists(key)) { cache.Remove(key); } } #endregion #region Exists(判断缓存是否存在) public bool Exists(string key) { if (cache[key] != null) { return true; } else { return false; } } #endregion #region GetCacheKeys(取得缓存所有Key) public List GetCacheKeys() { List keys = new List(); IDictionaryEnumerator ca = cache.GetEnumerator(); while (ca.MoveNext()) { keys.Add(ca.Key.ToString()); } return keys; } #endregion #region Push(放入队列) /// /// 放入队列 /// /// /// public void Push(string key, object data) { if (!dicQueue.Any(p => p.Key == key)) { dicQueue.Add(key, new Queue()); } var queue = dicQueue[key]; queue.Enqueue(data); } #endregion #region Push(放入队列) /// /// 放入队列 /// /// /// /// 此参数无效,系统缓存没有指定过期时间,强制为永久 public void Push(string key, object data, TimeSpan? timeSpan = null) { if (!dicQueue.Any(p => p.Key == key)) { dicQueue.Add(key, new Queue()); } var queue = dicQueue[key]; queue.Enqueue(data); } #endregion #region Popup(获取第一条数据,并删除) /// /// Popup(获取第一条数据,并删除) /// /// /// public object Popup(string key) { if (!dicQueue.Any(p => p.Key == key)) { dicQueue.Add(key, new Queue()); } var queue = dicQueue[key]; return queue.Dequeue(); } #endregion #region Incr(自增1,返回自增后的值) /// /// 自增1,返回自增后的值 /// /// /// public long Incr(string key) { if (!dicIncr.Any(p => p.Key == key)) { dicIncr.Add(key, 1); return 1; } dicIncr[key] = dicIncr[key] + 1; return dicIncr[key]; } #endregion #region Decr(递减1,返回递减后的值) /// /// 递减1,返回递减后的值 /// /// /// public long Decr(string key) { if (!dicIncr.Any(p => p.Key == key)) { dicIncr.Add(key, 0); return 0; } dicIncr[key] = dicIncr[key] - 1; return dicIncr[key]; } #endregion #region SetInt(设置一个整型缓存) /// /// 设置一个整型缓存 /// /// /// public void SetIncr(string key, int value) { if (!dicIncr.Any(p => p.Key == key)) { dicIncr.Add(key, value); } else { dicIncr[key] = value; } } #endregion } }