是否有任何asp.net数据缓存支持缓存条目的背景填充?
我们有一个数据驱动的ASP.NET网站,该网站使用标准模式进行数据缓存(从MSDN改编):
public DataTable GetData() { string key = "DataTable"; object item = Cache[key] as DataTable; if((item == null) { item = GetDataFromSQL(); Cache.Insert(key,item,null,DateTime.Now.AddSeconds(300),TimeSpan.Zero; } return (DataTable)item; } 这样做的问题是对GetDataFromSQL()的调用是昂贵的,并且该站点的使用相当高.因此,每隔五分钟,当缓存丢失时,该站点变得非常“粘滞”,而许多请求正在等待检索新数据. 我们真正想要的是旧数据保持最新,同时在后台定期重新加载新数据. (因此有人可能会看到六分钟的数据并不是一个大问题 – 数据不是时间敏感的).这是我自己可以编写的内容,但知道是否有任何替代缓存引擎(我知道Velocity,memcache等名称)支持这种情况会很有用.或者我错过了标准ASP.NET数据缓存的一些明显技巧? 解决方法
您应该能够使用CacheItemUpdateCallback委托,它是第6个参数,它是使用ASP.NET Cache进行插入的第4个重载:
Cache.Insert(key,value,dependancy,absoluteExpiration,slidingExpiration,onUpdateCallback); 以下应该有效: Cache.Insert(key,Cache.NoSlidingExpiration,itemUpdateCallback); private void itemUpdateCallback(string key,CacheItemUpdateReason reason,out object value,out CacheDependency dependency,out DateTime expiriation,out TimeSpan slidingExpiration) { // do your SQL call here and store it in 'value' expiriation = DateTime.Now.AddSeconds(300); value = FunctionToGetYourData(); } 从MSDN开始:
我没有对此进行过测试,因此您可能需要对其进行一些修补,但它应该为您提供您想要完成的基本想法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – 在PerfMon实例中选择正确的AppPool
- asp.net – 如何使用Twitter作为网站登录
- asp.net – 在Web api控制器中手动验证模型
- asp.net – 让网站暂时无法使用的优雅方式?
- asp.net-mvc – 如何在MVC中实现工作单元:责任
- 在ASP.NET MVC 5中创建对象时何时在C#中使用NEW关键字
- asp.net-mvc – MVC 4 HttpNotFound()和404错误
- asp.net-web-api – 如何在ASP.NET Web API中设置默认序列化
- asp.net-mvc-3 – 在ASP.NET MVC3中使用pdf.js.
- ASP.NET / MVC 4在64位IIS 7.5服务器上捆绑和缩小404问题
- asp.net-mvc – ASP.NET MVC显示格式不会将DateT
- asp.net-mvc – 我应该将ASP.NET MVC作为NuGet包
- 想要像asp.net或stackoverflow那样选择标签吗?
- asp.net-mvc – 为什么ASP.NET MVC默认的模型绑定
- asp.net-mvc – Asp.net MVC5,如何加载.hbs文件
- asp.net-mvc-4 – ASP.Net MVC JS / CSS捆绑在部
- asp.net-mvc – 服务层中的AutoMapper
- asp.net – 如何关闭.NET站点进行维护?
- asp.net – 带有查询字符串的server.Transfer
- asp.net – 为什么设置AssociatedUpdatePanelId时