是否有任何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 – SignalR长轮询在5秒内断开连接
- asp.net-mvc – 如果我使用ASP .NET MVC 3,我可以安全地从V
- entity-framework – 将DbContext注入Repository类库
- asp.net – WebApi:将参数映射到标头值
- iis – 如何查看有多少用户在线?
- asp.net-mvc – ASP.Net MVC中的实时视频聊天录制解决方案
- asp.net – 无法获取项目引用的依赖项
- asp.net-mvc – MVC 4 – 更优雅的方式编辑项目的可变长度列
- asp.net – 在自动生成的GridView列中防止HTML编码
- asp.net – 如何在mvc3中对来自@ Html.LabelFor()的内容进行
- ASP.NET显示SVN版本号
- asp.net-mvc – 在ASP.NET MVC中调用Session_End
- asp.net-mvc – 从Api控制器内生成绝对的url to
- 以编程方式获取当前的ASP.NET信任级别
- 用ASP.NET MVC阻止ZmEu攻击
- asp.net – 与WebAPI异步时保留HttpContext(中等
- asp.net – 更新ValidationSummary列表控件模糊?
- asp.net-web-api – 如何在HttpReponseMessage上
- asp.net-mvc – RenderAction调用错误的动作方法
- asp.net-mvc – 使用ASP.NET MVC /实体框架对POC
