public void OnShow(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { expensiveObject = "http://www.cnblogs.com/fish-li/"; dependency = null; absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; }
private void UpdateCallback(string key, CacheItemUpdateReason reason, out object value, out CacheDependency dependency, out DateTime absoluteexpiration, out TimeSpan slidingexpiration) { CacheEntry cacheEntry = null; // check if we should reload the data if (reason == CacheItemUpdateReason.Expired) { NotifyExpired(key); cacheEntry = LoadCacheEntry(key); } // check if we have a new cache entry if (cacheEntry != null) { value = cacheEntry; dependency = null; absoluteexpiration = CreateExpiresDate(); slidingexpiration = Cache.NoSlidingExpiration; } else { value = null; dependency = null; absoluteexpiration = Cache.NoAbsoluteExpiration; slidingexpiration = Cache.NoSlidingExpiration; } }
private static void HandleExpiration <T>(HttpCacheShim that , CacheAddParameters <T> parameters , string cacheKey , CacheItemUpdateReason reason , out object expensiveObject , out CacheDependency dependency , out DateTime absoluteExpiration , out TimeSpan slidingExpiration) where T : class { Log("Expired", () => "(" + reason + ") " + cacheKey); expensiveObject = null; dependency = null; absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; // if we were not shutting down, might want to handle the reuse/refresh if (reason == CacheItemUpdateReason.Expired && !AppDomain.CurrentDomain.IsFinalizingForUnload()) { if (parameters.ShouldScheduleRefresh && HttpCacheShim.DisableBackfill == false && !BackgroundQueue.IsBacklogged()) { // we need queue a request to the underlying store to get more current data into the cache so it stays primed. BackgroundQueue.Enqueue(parameters); } } }
/// <summary> /// 更新缓存回调函数 /// </summary> /// <param name="key">键</param> /// <param name="value">值</param> /// <param name="reason">更新缓存的原因</param> public void onUpdatedCallback(string key, object value, CacheItemUpdateReason reason) { if (reason == CacheItemUpdateReason.DependencyChanged) { } //Response.Write("文件变了,快去看看"); }
public static void RunOptionsUpdateCallback( string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { // 注意哦:在这个方法中,不要出现【未处理异常】,否则缓存对象将被移除。 // 说明:这里我并不关心参数reason,因为我根本就没有使用过期时间 // 所以,只有一种原因:依赖的文件发生了改变。 // 参数key我也不关心,因为这个方法是【专用】的。 string file = Path.Combine(AppDataPath, _fileName); if (File.Exists(file)) { expensiveObject = _cacheNumber++; dependency = new CacheDependency(Path.Combine(AppDataPath, _fileName)); } else { expensiveObject = _cacheNumber++; dependency = new CacheDependency(Path.Combine(AppDataPath, _fileName)); HttpRuntime.Cache.Remove(key); } absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; //// 检验代码是否被同一个修改文件的事件执行了二次,【注意目录是我机器上的】 //System.IO.File.WriteAllText("c:\\Temp\\" + Guid.NewGuid().ToString() + ".txt", key); // 由于事件发生时,文件可能还没有完全关闭,所以只好让程序稍等。 System.Threading.Thread.Sleep(50); }
/// <summary> /// 当记录点赞数失效后,执行本函数 /// </summary> /// <param name="key"></param> /// <param name="reason"></param> /// <param name="expensiveObject"></param> /// <param name="dependency"></param> /// <param name="absoluteExpiration"></param> /// <param name="slidingExporation"></param> public void MyCacheUpdataCallback(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExporation) { try { //根据Key 取得Id然后取得缓存值,即为点赞数,并记录到数据库中 string idstr = key.Substring(key.LastIndexOf("_", key.Length - key.LastIndexOf("_") + 1)); int id = Convert.ToInt32(idstr); //得到缓存 var value = HttpRuntime.Cache.Get(key); var article = blogsdbContext.article.Where(m => m.ID == id).First(); article.UP = Convert.ToInt32(value); blogsdbContext.SaveChanges(); expensiveObject = value; HttpRuntime.Cache.Remove(key); } catch (Exception) { expensiveObject = DateTime.Now.ToString(); } dependency = null; absoluteExpiration = DateTime.UtcNow.AddSeconds(-1); slidingExporation = Cache.NoSlidingExpiration; }
bool NeedsUpdate(CacheItem item, CacheItemUpdateReason reason, bool needLock) { try { if (needLock) { cacheLock.EnterWriteLock(); } if (item == null || item.OnUpdateCallback == null) { return(false); } object expensiveObject; CacheDependency dependency; DateTime absoluteExpiration; TimeSpan slidingExpiration; string key = item.Key; CacheItemUpdateCallback updateCB = item.OnUpdateCallback; updateCB(key, reason, out expensiveObject, out dependency, out absoluteExpiration, out slidingExpiration); if (expensiveObject == null) { return(false); } CacheItemPriority priority = item.Priority; CacheItemRemovedCallback removeCB = item.OnRemoveCallback; CacheItemRemovedReason whyRemoved; switch (reason) { case CacheItemUpdateReason.Expired: whyRemoved = CacheItemRemovedReason.Expired; break; case CacheItemUpdateReason.DependencyChanged: whyRemoved = CacheItemRemovedReason.DependencyChanged; break; default: whyRemoved = CacheItemRemovedReason.Removed; break; } Remove(key, whyRemoved, false, false); Insert(key, expensiveObject, dependency, absoluteExpiration, slidingExpiration, priority, removeCB, updateCB, false); return(true); } catch (Exception) { return(false); } finally { if (needLock) { // See comment at the top of the file, above cacheLock declaration cacheLock.ExitWriteLock(); } } }
private void Callback(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { expensiveObject = null; dependency = null; absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; Console.WriteLine("{0} key expired", key); }
/// <summary> /// 缓存改变回调函数 /// 目的是当接口文档.XML文件发生改变的时候,重新加载接口文档定义。通常发生在接口更新的时候 /// </summary> /// <param name="key"></param> /// <param name="reason"></param> /// <param name="expensiveObject"></param> /// <param name="dependency"></param> /// <param name="absoluteExpiration"></param> /// <param name="slidingExpiration"></param> private void CacheItemUpdateCallback(string key, CacheItemUpdateReason reason, out Object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { expensiveObject = GetApiList(); absoluteExpiration = Cache.NoAbsoluteExpiration; dependency = new CacheDependency(_FullConfigName); slidingExpiration = TimeSpan.FromHours(1.0); }
private void HandleUpdateNotification(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { System.Diagnostics.Debug.WriteLine("Item {0} removed ({1})", key, Enum.GetName(typeof(CacheItemUpdateReason), reason)); expensiveObject = dependency = new SelfExpiringData<long?>(GetData(false).Result, 3); absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; }
private static void CacheUpdateCallback(string key, CacheItemUpdateReason callbackreason, out object value, out CacheDependency dependency, out DateTime expiration, out TimeSpan slidingExpiration) { Uri xmlPath = GetUriXmlPath(@"StoredProcedures.xml"); dependency = new CacheDependency(xmlPath.LocalPath); expiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; value = LoadStoredProcedureCache(); }
private static void CacheUpdateCallback(string key, CacheItemUpdateReason callbackreason, out object value, out CacheDependency dependency, out DateTime expiration, out TimeSpan slidingExpiration) { string sXMLPath = Path.Combine(Utility.ComponentBaseFolder + "\\Xml", ComponentTypeName + ".xml"); dependency = new CacheDependency(sXMLPath); expiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; value = LoadComponentXMLCache(); }
public static void ASPCacheRemoveCallBack(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { expensiveObject = null; dependency = null; absoluteExpiration = DateTime.Now; slidingExpiration = TimeSpan.Zero; CompanyPay.LogHelper.WriteLine("Key:" + key + "被删除,原因:" + reason + ",时间:" + DateTime.Now.ToString() + "可用数:" + HttpRuntime.Cache.EffectivePrivateBytesLimit); }
private static void OnCacheEntryExpired(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { expensiveObject = null; dependency = null; absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; CachedAttachmentInfo cachedAttachmentInfo = (CachedAttachmentInfo)HttpRuntime.Cache.Get(key); if (cachedAttachmentInfo.CobaltStore == null) { return; } WacRequestHandler.OnCacheEntryExpired(cachedAttachmentInfo); }
private void RunOptionsUpdateCallback( string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { expensiveObject = "c001" + DateTime.Now.ToString("yyyyMMddHHmmss"); dependency = new CacheDependency(path); absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; Load(); }
private void HandleNotification(string key, CacheItemUpdateReason reason, out object data, out CacheDependency dependency, out DateTime absoluteExpiry, out TimeSpan slidingExpiry) { System.Diagnostics.Debug.WriteLine("Item {0} removed. ({1})", key, Enum.GetName(typeof(CacheItemRemovedReason), reason)); data = dependency = new SelfExpiringData <long?>(GetData(false).Result, 3); slidingExpiry = Cache.NoSlidingExpiration; absoluteExpiry = Cache.NoAbsoluteExpiration; }
public void HandleUpdteCallback(String key, CacheItemUpdateReason reason, out Object data, out CacheDependency dependency, out DateTime absExpiry, out TimeSpan slidingExpiry) { Boolean renew = accessedCounter >= renewTheshold; if (renew) { dataObject = updateCallback(); accessedCounter = 0; } data = renew ? this : null; dependency = null; slidingExpiry = Cache.NoSlidingExpiration; absExpiry = renew ? Expiry : Cache.NoAbsoluteExpiration; }
private static void DMCacheItemUpdateCallback( string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration ) { //Debug.Print(string.Format("###: key={0} reason={1}, time={2}", key, reason, DateTime.Now)); expensiveObject = null; dependency = null; absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; }
private static void OnCacheItemRemoved(string key, CacheItemUpdateReason reason, out object obj, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { var uploadSession = GetSession(key); CoreContext.TenantManager.SetCurrentTenant(uploadSession.TenantId); using (var dao = Global.DaoFactory.GetFileDao()) { dao.AbortUploadSession(uploadSession); } obj = null; dependency = null; absoluteExpiration = AbsoluteExpiration; slidingExpiration = SlidingExpiration; }
private void HandleUpdateCallback(string key, CacheItemUpdateReason reason, out object data, out CacheDependency dependency, out DateTime absExpiry, out TimeSpan slidingExpiry) { bool renew = _accessedCounter >= _renewThreshold; if (renew) { _dataObject = _updateCallback(); _accessedCounter = 0; } data = renew ? this : null; dependency = null; slidingExpiry = Cache.NoSlidingExpiration; absExpiry = renew ? Expiry : Cache.NoAbsoluteExpiration; }
private void HandleUpdateCallback(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { bool renew = accessedCounter >= renewThreshold; if (renew) { dataObject = updateCallback(); accessedCounter = 0; } expensiveObject = renew ? this : null; dependency = null; absoluteExpiration = renew ? Expiry : Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; }
/// <summary> /// 缓存删除之前调用方法 /// </summary> /// <param name="key"></param> /// <param name="reason"></param> /// <param name="expensiveObject"></param> /// <param name="dependency"></param> /// <param name="absoluteExpiration"></param> /// <param name="slidingExpiration"></param> public void UpdateCallback(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { // key:要从缓存中移除的项的标识符。 // reason:要从缓存中移除项的原因。 // expensiveObject:此方法返回时,包含含有更新的缓存项对象。 // dependency:此方法返回时,包含定义项对象和文件、缓存键、文件或缓存键的数组或另一个 System.Web.Caching.CacheDependency 对象之间的依赖项的对象。 // absoluteExpiration:此方法返回时,包含对象的到期时间。 // slidingExpiration:此方法返回时,包含对象的上次访问时间和对象的到期时间之间的时间间隔。 expensiveObject = null; dependency = null; absoluteExpiration = DateTime.Now; slidingExpiration = TimeSpan.Zero; Console.WriteLine("缓存马上被移除!"); //但是现在还有没有呢?输出试试 Console.WriteLine(HttpRuntime.Cache["DD"]); Console.WriteLine(reason.ToString()); }
public void RunOptionsUpdateCallback(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { // 注意哦:在这个方法中,不要出现【未处理异常】,否则缓存对象将被移除。 // 说明:这里并不关心参数reason,因为我根本就没有使用过期时间 所以,只有一种原因:依赖的文件发生了改变。 expensiveObject = CacheDependencyValueObj; dependency = new CacheDependency(Path.Combine(Global.App_DataDir, fileName)); absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; // 由于事件发生时,文件可能还没有完全关闭,所以只好让程序稍等。 System.Threading.Thread.Sleep(50); // 重新加载配置参数 _options = LoadRunOptions(); }
private void CacheItemUpdateCallback(string key, CacheItemUpdateReason reason, out Object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { expensiveObject = new object(); dependency = new SqlCacheDependency(_connectionStringKey, TableName); absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; try { InitCacheList(); IdentifyChanges(); } catch (Exception ex) { var logger = Container.Instance.Resolve <IExceptionLogger>(); logger.LogException(ex, "CACHE DEPENDENCY FAILED ON UPDATE CALLBACK"); } }
private static void UploadSettingsUpdateCallback( string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { // 注意哦:在这个方法中,不要出现【未处理异常】,否则缓存对象将被移除。 // 说明:这里我并不关心参数reason,因为我根本就没有使用过期时间 // 所以,只有一种原因:依赖的文件发生了改变。 // 参数key我也不关心,因为这个方法是【专用】的。 expensiveObject = "yxl"; dependency = new CacheDependency(GetSettingsFilePath()); absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; // 重新加载配置参数 Init(); }
private static void RefetchItem(string key, CacheItemUpdateReason reason, out object value, out CacheDependency dependency, out DateTime exipriation, out TimeSpan slidingExpiration) { var meta = _meta[key]; int refreshLimit = meta.Item3; int refreshCount = meta.Item4 + 1; if (refreshLimit == 0 || refreshCount <= refreshLimit) { Debug.Print(String.Format("Refreshing cache: {0} - #{1}", key, refreshCount)); _meta[key] = new Tuple <Func <object>, TimeSpan, int, int>(meta.Item1, meta.Item2, meta.Item3, refreshCount); //reset into cache dummy object to get callback value = new object(); dependency = null; exipriation = DateTime.Now.Add(meta.Item2); slidingExpiration = Cache.NoSlidingExpiration; try { var data = meta.Item1(); //get new data _cache[key] = data; } catch (Exception ex) { Debug.Print(ex.ToString()); /*no-op*/ } } else { Debug.Print(String.Format("Expiring cache: {0} - #{1}", key, refreshCount)); //expire cache value = null; dependency = null; exipriation = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; Remove(key); } }
public static void PetLinkListCacheItemUpdateCallbackMethod(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { // Step 0. expensiveObject = null; dependency = null; absoluteExpiration = DateTime.Now.AddSeconds(GetPetLinkListExpirationInSeconds()); slidingExpiration = Cache.NoSlidingExpiration; if (DateTime.Now.Minute % 10 == 0) { return; // do nothing } // Step 1. Parse Key Guid?providerGroupId = GetPetLinkListCacheKeyProviderGroupId(key); if (providerGroupId != null) { expensiveObject = new GetPetLinkList() { ProviderGroupId = providerGroupId.Value }.ExecuteList(); } }
private static void OnCacheItemExpired(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { log.DebugFormat("Cache item '{0}' expired, reason: {1}.", key, reason); expensiveObject = null; dependency = null; absoluteExpiration = Cache.NoAbsoluteExpiration; slidingExpiration = Cache.NoSlidingExpiration; }
bool NeedsUpdate (CacheItem item, CacheItemUpdateReason reason, bool needLock) { try { if (needLock) cacheLock.EnterWriteLock (); if (item == null || item.OnUpdateCallback == null) return false; object expensiveObject; CacheDependency dependency; DateTime absoluteExpiration; TimeSpan slidingExpiration; string key = item.Key; CacheItemUpdateCallback updateCB = item.OnUpdateCallback; updateCB (key, reason, out expensiveObject, out dependency, out absoluteExpiration, out slidingExpiration); if (expensiveObject == null) return false; CacheItemPriority priority = item.Priority; CacheItemRemovedCallback removeCB = item.OnRemoveCallback; CacheItemRemovedReason whyRemoved; switch (reason) { case CacheItemUpdateReason.Expired: whyRemoved = CacheItemRemovedReason.Expired; break; case CacheItemUpdateReason.DependencyChanged: whyRemoved = CacheItemRemovedReason.DependencyChanged; break; default: whyRemoved = CacheItemRemovedReason.Removed; break; } Remove (key, whyRemoved, false, false); Insert (key, expensiveObject, dependency, absoluteExpiration, slidingExpiration, priority, removeCB, updateCB, false); return true; } catch (Exception) { return false; } finally { if (needLock) { // See comment at the top of the file, above cacheLock declaration cacheLock.ExitWriteLock (); } } }