ASP.NET MVC 缓存场景

6
我仍未找到解决我的问题的好方法。基本上,我有一个ASP.NET MVC网站,它需要大量数据库访问来生成视图(每个视图2-3个查询),我想利用缓存来提高性能。
问题在于视图包含的数据可能会不规则地更改,例如相同的数据可能会持续2天,也可能会在1小时内多次更改。
查询非常简单(select... from where...),没有巨大的连接,每个查询平均返回20-30行数据(大约10个列)。
目前该站点的查询非常简单,但随着时间的推移,所有者将添加更多数据并增加访客数量。它们现在很大,我将考虑将其缓存,因为流量主要来自Google AdWords等,快速加载页面将是一个优势(显然)。
该网站将托管在Microsoft SQL Server 2005数据库上(如果需要,可以升级到2008)。
我应该:
  1. 将缓存设置为物品不更改的最短时间(例如缓存3分钟),并告诉所有者任何更改最多需要3分钟才能显示?
  2. 找到一种方式强制清除缓存并在更改时重新处理(例如:如果所有者在管理面板中添加项目,则清除相关缓存)
  3. 完全放弃缓存
  4. 还有适合这种情况的选项吗?
3个回答

5
如果你正在使用Sql Server,还有另一种选择可供考虑:使用SqlCacheDependency类,在底层数据更新时使缓存失效。显然,这与选项2实现的结果相似。
我可能真的要同意Agileguy - 你的查询描述似乎非常简单。向前思考并在设计时保持缓存在心中是一个好主意,但你是否已经证明你现在确实需要它呢?假设你现在没有遇到重大性能问题,选项3似乎比选项1好得多。

是的,我忘了提到这一点,我会在问题下添加一个注释。现在正在查看您的建议 :) - Phil
也许你应该考虑使用ORM工具(例如NHibernate),它有内置机制用于缓存数据。 - dariol

4

过早的优化是万恶之源 ;)

话虽如此,如果你要使用缓存,我建议选择基于选项2的解决方案。

这种方式下,"脏"数据的机会较少。

祝好,

Dan


0

第二个选项是最好的。如果同一个应用程序编辑/缓存数据,那么不应该太难。如果有多个应用程序,则可能会更加棘手。

如果您无法采用这种方式,第一种方法也可能是可接受的。通过一些调整(例如-当它超时时,我会尝试在另一个线程上静默更新缓存),它可能足够好用(如果允许数据有点旧)。

如果可能,永远不要放弃缓存。每个人都知道“过早优化...”的诗句,但缓存是可以极大地增加应用程序的可扩展性/性能的其中之一。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接