CBCache.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Configuration;
  5. using CB.Cache.WebCache;
  6. namespace CB.Cache
  7. {
  8. public class CBCache
  9. {
  10. private static ICacheStrategy cs;
  11. private static volatile CBCache instance = null;
  12. //private static IList<string> cacheKeys = new List<string>();
  13. private static object lockHelper = new object();
  14. private CBCache()
  15. {
  16. //cs = new WebCache.WebCache();
  17. //cs = new Redis.Redis();
  18. //var keys = typeof(CacheKeys).GetFields();
  19. //if (null == keys || 0 >= keys.Length)
  20. // return;
  21. //object o = new object();
  22. //foreach (var item in keys)
  23. //{
  24. // cacheKeys.Add(item.GetValue(o).ToString().Split('-')[0]);
  25. //}
  26. }
  27. static CBCache()
  28. {
  29. //根据配置文件初始化
  30. string which = ConfigurationManager.AppSettings["__Cache__Factory__"];
  31. switch (which)
  32. {
  33. case "Redis":
  34. cs = new Redis.Redis();
  35. break;
  36. case "WebCache":
  37. cs = new WebCache.WebCache();
  38. break;
  39. default:
  40. cs = new WebCache.WebCache();
  41. break;
  42. }
  43. }
  44. public static CBCache GetCacheService()
  45. {
  46. if (instance == null)
  47. {
  48. lock (lockHelper)
  49. {
  50. if (instance == null)
  51. {
  52. instance = new CBCache();
  53. }
  54. }
  55. }
  56. return instance;
  57. }
  58. /// <summary>
  59. /// 添加指定ID的对象,默认10分钟
  60. /// </summary>
  61. /// <param name="objId">缓存键</param>
  62. /// <param name="o">缓存对象</param>
  63. public virtual void AddObject(string objId, object o)
  64. {
  65. lock (lockHelper)
  66. {
  67. cs.AddObject(objId, o, int.Parse(ConfigurationManager.AppSettings["CacheDateTime"]));
  68. }
  69. }
  70. /// <summary>
  71. /// 添加指定ID的对象
  72. /// </summary>
  73. /// <param name="objId">缓存键</param>
  74. /// <param name="o">缓存对象</param>
  75. /// <param name="expire">到期时间,单位:秒</param>
  76. public virtual void AddObject(string objId, object o, int expire)
  77. {
  78. lock (lockHelper)
  79. {
  80. cs.AddObject(objId, o, expire);
  81. }
  82. }
  83. /// <summary>
  84. /// 添加指定ID的对象(关联指定文件组)
  85. /// </summary>
  86. /// <param name="objId">缓存键</param>
  87. /// <param name="o">缓存对象</param>
  88. /// <param name="files">关联的文件名</param>
  89. public virtual void AddObjectWithFileChange(string objId, object o, string[] files)
  90. {
  91. lock (lockHelper)
  92. {
  93. cs.AddObjectWithFileChange(objId, o, files);
  94. }
  95. }
  96. /// <summary>
  97. /// 添加指定ID的对象(关联指定键值组)
  98. /// </summary>
  99. /// <param name="objId">缓存键</param>
  100. /// <param name="o">缓存对象</param>
  101. /// <param name="dependKey">依赖键</param>
  102. public virtual void AddObjectWithDepend(string objId, object o, string[] dependKey)
  103. {
  104. lock (lockHelper)
  105. {
  106. cs.AddObjectWithDepend(objId, o, dependKey);
  107. }
  108. }
  109. /// <summary>
  110. /// 移除指定ID的对象
  111. /// </summary>
  112. /// <param name="objId">缓存键</param>
  113. public virtual void RemoveObject(string objId)
  114. {
  115. lock (lockHelper)
  116. {
  117. cs.RemoveObject(objId);
  118. SyncCache.SyncRemoteCache(objId);
  119. }
  120. }
  121. /// <summary>
  122. /// 正则表达式方式移出缓存
  123. /// </summary>
  124. /// <param name="pattern"></param>
  125. public virtual void RemoveByRegex(string pattern)
  126. {
  127. lock (lockHelper)
  128. {
  129. if (!string.IsNullOrEmpty(pattern))
  130. {
  131. IDictionaryEnumerator enu = System.Web.HttpRuntime.Cache.GetEnumerator();
  132. while (enu.MoveNext())
  133. {
  134. string key = enu.Key.ToString();
  135. if (key.IndexOf(pattern) != -1)
  136. {
  137. RemoveObject(key);
  138. }
  139. }
  140. }
  141. }
  142. }
  143. /// <summary>
  144. /// 返回指定ID的对象
  145. /// </summary>
  146. /// <param name="objId">缓存键</param>
  147. /// <returns></returns>
  148. public virtual object GetObject(string objId)
  149. {
  150. return cs.GetObject(objId);
  151. }
  152. /// <summary>
  153. /// 清空的有缓存数据, 注: 考虑效率问题,建议仅在需要时(如后台管理)使用.
  154. /// </summary>
  155. public void FlushAll()
  156. {
  157. cs.FlushAll();
  158. }
  159. }
  160. }