using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using CB.Cache.WebCache; namespace CB.Cache { public class CBCache { private static ICacheStrategy cs; private static volatile CBCache instance = null; //private static IList cacheKeys = new List(); private static object lockHelper = new object(); private CBCache() { //cs = new WebCache.WebCache(); //cs = new Redis.Redis(); //var keys = typeof(CacheKeys).GetFields(); //if (null == keys || 0 >= keys.Length) // return; //object o = new object(); //foreach (var item in keys) //{ // cacheKeys.Add(item.GetValue(o).ToString().Split('-')[0]); //} } static CBCache() { //根据配置文件初始化 string which = ConfigurationManager.AppSettings["__Cache__Factory__"]; switch (which) { case "Redis": cs = new Redis.Redis(); break; case "WebCache": cs = new WebCache.WebCache(); break; default: cs = new WebCache.WebCache(); break; } } public static CBCache GetCacheService() { if (instance == null) { lock (lockHelper) { if (instance == null) { instance = new CBCache(); } } } return instance; } /// /// 添加指定ID的对象,默认10分钟 /// /// 缓存键 /// 缓存对象 public virtual void AddObject(string objId, object o) { lock (lockHelper) { cs.AddObject(objId, o, int.Parse(ConfigurationManager.AppSettings["CacheDateTime"])); } } /// /// 添加指定ID的对象 /// /// 缓存键 /// 缓存对象 /// 到期时间,单位:秒 public virtual void AddObject(string objId, object o, int expire) { lock (lockHelper) { cs.AddObject(objId, o, expire); } } /// /// 添加指定ID的对象(关联指定文件组) /// /// 缓存键 /// 缓存对象 /// 关联的文件名 public virtual void AddObjectWithFileChange(string objId, object o, string[] files) { lock (lockHelper) { cs.AddObjectWithFileChange(objId, o, files); } } /// /// 添加指定ID的对象(关联指定键值组) /// /// 缓存键 /// 缓存对象 /// 依赖键 public virtual void AddObjectWithDepend(string objId, object o, string[] dependKey) { lock (lockHelper) { cs.AddObjectWithDepend(objId, o, dependKey); } } /// /// 移除指定ID的对象 /// /// 缓存键 public virtual void RemoveObject(string objId) { lock (lockHelper) { cs.RemoveObject(objId); SyncCache.SyncRemoteCache(objId); } } /// /// 正则表达式方式移出缓存 /// /// public virtual void RemoveByRegex(string pattern) { lock (lockHelper) { if (!string.IsNullOrEmpty(pattern)) { IDictionaryEnumerator enu = System.Web.HttpRuntime.Cache.GetEnumerator(); while (enu.MoveNext()) { string key = enu.Key.ToString(); if (key.IndexOf(pattern) != -1) { RemoveObject(key); } } } } } /// /// 返回指定ID的对象 /// /// 缓存键 /// public virtual object GetObject(string objId) { return cs.GetObject(objId); } /// /// 清空的有缓存数据, 注: 考虑效率问题,建议仅在需要时(如后台管理)使用. /// public void FlushAll() { cs.FlushAll(); } } }