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

Mor*_*man 6 datacontext asp.net-mvc caching linq-to-sql

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

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

Odd*_*Odd 6

在对两者进行了一些测试之后,我在代码的上下文中对缓存应用程序块进行了全面审查,并在博客上发表了我的经验.它使用起来非常简单,功能强大,足以满足我们的需求.我推荐它,我的结果在这里写博客.

在您的位置,我将使用存储库模式来维护我的缓存,它适用于数据库数据集,并且应该同样适用于您自己的缓存.如果您不熟悉存储库模式,请查看Steven Walther的这篇文章..我倾向于不同意之前的回答,但是只取出你需要修改的东西,并且不接触其余的东西.如果您愿意,这将允许您从整个列表中独立地使缓存中的项目到期.


lig*_*t78 2

实现缓存的方法有多种,httpcontext 是最简单的一种,但不一定是最差的。看一下memcachedMS Velocity,它们都可以用作 ASP.NET 缓存的后端。尤其是 memcached 因其出色的工作而享有盛誉。

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

不要忘记优化您的数据库代码,这样就不会花费太多时间来刷新刷新列表。