Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在使用linq2sql存储库的Asp.net Mvc中实现缓存策略?_Asp.net Mvc_Linq To Sql_Caching_Datacontext - Fatal编程技术网

Asp.net mvc 如何在使用linq2sql存储库的Asp.net Mvc中实现缓存策略?

Asp.net mvc 如何在使用linq2sql存储库的Asp.net Mvc中实现缓存策略?,asp.net-mvc,linq-to-sql,caching,datacontext,Asp.net Mvc,Linq To Sql,Caching,Datacontext,我不知道应该使用httpcontext缓存还是企业库缓存应用程序块。另外,删除或更新作为缓存列表一部分的实体时,缓存策略的最佳模式是什么 我应该从缓存中删除所有列表还是仅从缓存列表中删除该项? 如果我更新它,我将从缓存中删除列表或更新其中的实体。有几种实现缓存的方法,httpcontext是最简单的方法,但不一定是最差的方法。请看一看或,它们都可以用作ASP.NET缓存的后端。尤其是memcached,它的工作非常出色 至于缓存策略:您必须决定什么最适合您。我个人会在更新/删除时从缓存中删除完整

我不知道应该使用httpcontext缓存还是企业库缓存应用程序块。另外,删除或更新作为缓存列表一部分的实体时,缓存策略的最佳模式是什么

我应该从缓存中删除所有列表还是仅从缓存列表中删除该项?
如果我更新它,我将从缓存中删除列表或更新其中的实体。

有几种实现缓存的方法,httpcontext是最简单的方法,但不一定是最差的方法。请看一看或,它们都可以用作ASP.NET缓存的后端。尤其是memcached,它的工作非常出色

至于缓存策略:您必须决定什么最适合您。我个人会在更新/删除时从缓存中删除完整的列表,而不是试图找出实体是否在列表中,因为这需要花费大量时间,您需要考虑并发问题(锁定列表,因为有人可能会更新/删除另一个实体)。 有时就地更新实体是有意义的(如果您有一个包含所有所需数据的完整对象),有时这是浪费时间,因为由于某些状态更改,实体应该移动到其他地方(例如,当您按LastChangedDate排序时等)


不要忘了优化你的DB代码,这样刷新刷新列表就不会花费太多时间。

在完成了这两项测试后,我在代码上下文中对缓存应用程序块进行了全面的回顾,并在博客中介绍了我的使用经验。它使用非常简单,功能强大,足以满足我们的需要。我建议t、

在你的位置上,我会使用存储库模式来维护我的缓存,它对数据库数据集很有效,对你自己的缓存也应该同样有效。如果你不熟悉存储库模式,我会倾向于不同意前面的答案,但是,只取下你需要修改的项目,并删除缓存保持不变。如果您愿意,这将允许您独立于整个列表终止缓存中的项目。

只需使用[OutputCache(Duration=10,VaryByParam=“none”)] 在要缓存的每个操作甚至控制器上