/// <summary> /// 处理Cache项的改变 /// </summary> /// <param name="data"></param> protected void DoCacheChanged(CacheNotifyData data) { DependencyBase dependency; if (data.NotifyType == CacheNotifyType.Clear) { //清除所有UDP缓存相关的缓存队列 CacheQueueBase needToClearQueue = null; lock (this.CacheItems) { foreach (KeyValuePair <CacheNotifyKey, DependencyBase> kp in this.CacheItems) { if (kp.Key.CacheQueueType == data.CacheQueueType) { needToClearQueue = kp.Value.CacheItem.Queue; } } } if (needToClearQueue != null) { needToClearQueue.Clear(); } } else { CacheNotifyKey key = new CacheNotifyKey(); key.CacheKey = data.CacheKey; key.CacheQueueType = data.CacheQueueType; lock (this.CacheItems) { if (this.CacheItems.TryGetValue(key, out dependency)) { switch (data.NotifyType) { case CacheNotifyType.Invalid: dependency.SetChanged(); this.CacheItems.Remove(key); break; case CacheNotifyType.Update: dependency.CacheItem.SetValue(data.CacheData); break; } } } } }
/// <summary> /// 构造函数,初始化具有Dependency的CacheItem /// </summary> /// <param name="tKey">初始化CacheItem的键值</param> /// <param name="data">CacheItem的Value</param> /// <param name="dependencyBase">与此CacheItem相关的Dependency,用以判断过期</param> /// <param name="cacheQueue"> 本CacheItem所属的CacheQueue的引用</param> public CacheItem(TKey tKey, TValue data, DependencyBase dependencyBase, CacheQueueBase cacheQueue) : base(cacheQueue) { this.key = tKey; this.tValue = data; if (dependencyBase != null) { dependencyBase.CacheItem = this; dependencyBase.CacheItemBinded(); } this.Dependency = dependencyBase; }
/// <summary> /// 渲染每一条Cache项 /// </summary> /// <param name="writer"></param> /// <param name="queueInfo"></param> private static void RenderCacheQueueItemsInfo(HtmlTextWriter writer, CacheQueueInfo queueInfo) { Type type = TypeCreator.GetTypeInfo(queueInfo.QueueTypeFullName); CacheQueueBase cacheQueue = CacheManager.GetInstance(type); CacheItemInfoCollection itemsInfo = cacheQueue.GetAllItemsInfo(); foreach (CacheItemInfo itemInfo in itemsInfo) { writer.WriteBeginTag("div"); writer.WriteAttribute("class", "queueInfoDetail"); writer.Write(">"); writer.Write(HttpUtility.HtmlEncode(string.Format("Key={0}, Value={1}", itemInfo.Key, itemInfo.Value))); writer.WriteEndTag("div"); } }
/// <summary> /// 构造函数,初始化没有Dependency的CacheItem /// </summary> /// <param name="tKey">初始化CacheItem的Key值</param> /// <param name="data">初始化CacheItem的Value值</param> /// <param name="cacheQueue">本CacheItem所属的CacheQueue的引用</param> public CacheItem(TKey tKey, TValue data, CacheQueueBase cacheQueue) : base(cacheQueue) { this.key = tKey; this.tValue = data; }
/// <summary> /// 构造方法 /// </summary> /// <param name="cacheQueueBase"></param> public CacheItemBase(CacheQueueBase cacheQueueBase) { this.cacheQueue = cacheQueueBase; }