123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- 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<string> cacheKeys = new List<string>();
- 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;
- }
- /// <summary>
- /// 添加指定ID的对象,默认10分钟
- /// </summary>
- /// <param name="objId">缓存键</param>
- /// <param name="o">缓存对象</param>
- public virtual void AddObject(string objId, object o)
- {
- lock (lockHelper)
- {
- cs.AddObject(objId, o, int.Parse(ConfigurationManager.AppSettings["CacheDateTime"]));
- }
- }
- /// <summary>
- /// 添加指定ID的对象
- /// </summary>
- /// <param name="objId">缓存键</param>
- /// <param name="o">缓存对象</param>
- /// <param name="expire">到期时间,单位:秒</param>
- public virtual void AddObject(string objId, object o, int expire)
- {
- lock (lockHelper)
- {
- cs.AddObject(objId, o, expire);
- }
- }
- /// <summary>
- /// 添加指定ID的对象(关联指定文件组)
- /// </summary>
- /// <param name="objId">缓存键</param>
- /// <param name="o">缓存对象</param>
- /// <param name="files">关联的文件名</param>
- public virtual void AddObjectWithFileChange(string objId, object o, string[] files)
- {
- lock (lockHelper)
- {
- cs.AddObjectWithFileChange(objId, o, files);
- }
- }
- /// <summary>
- /// 添加指定ID的对象(关联指定键值组)
- /// </summary>
- /// <param name="objId">缓存键</param>
- /// <param name="o">缓存对象</param>
- /// <param name="dependKey">依赖键</param>
- public virtual void AddObjectWithDepend(string objId, object o, string[] dependKey)
- {
- lock (lockHelper)
- {
- cs.AddObjectWithDepend(objId, o, dependKey);
- }
- }
- /// <summary>
- /// 移除指定ID的对象
- /// </summary>
- /// <param name="objId">缓存键</param>
- public virtual void RemoveObject(string objId)
- {
- lock (lockHelper)
- {
- cs.RemoveObject(objId);
- SyncCache.SyncRemoteCache(objId);
- }
- }
- /// <summary>
- /// 正则表达式方式移出缓存
- /// </summary>
- /// <param name="pattern"></param>
- 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);
- }
- }
- }
- }
- }
- /// <summary>
- /// 返回指定ID的对象
- /// </summary>
- /// <param name="objId">缓存键</param>
- /// <returns></returns>
- public virtual object GetObject(string objId)
- {
- return cs.GetObject(objId);
- }
- /// <summary>
- /// 清空的有缓存数据, 注: 考虑效率问题,建议仅在需要时(如后台管理)使用.
- /// </summary>
- public void FlushAll()
- {
- cs.FlushAll();
- }
- }
- }
|