2009-09-02 87 views
6

我还没有找到一个体面的解决方案,我的方案。基本上我有一个ASP.NET MVC网站,它具有一定的数据库访问权限(每个视图有2-3个查询),我想利用缓存来提高性能。ASP.NET MVC缓存场景

问题是,视图中包含的数据可能会不规则地更改,例如2天内可能会相同,或者数据可能在一个小时内多次更改。

查询非常简单(选择...从哪里...),而不是巨大的联接,每个平均返回20-30行数据(约10列)。

在网站的现阶段查询非常简单,但随着时间的推移,所有者将增加更多的数据,访问者数量将增加。他们目前很大,我会考虑缓存,因为流量主要来自谷歌AdWords等,快速加载页面将是一个好处(显然)。

该网站将托管在Microsoft SQL Server 2005数据库上(但可以根据需要升级到2008)。

我是否可以:

  1. 设置缓存的最短时间的项目不会对改变(例如缓存比如说3分钟),并告诉车主的任何更改将需要长达3分钟出现?

  2. 找到一个方法来强制高速缓存清除并重新处理上的变化(例如,如果所有者增加了在管理面板中的项目将清除相关缓存)

  3. 忘记缓存一起

  4. 或者有没有适合这种情况的选项?

回答

5

如果您正在使用SQL Server,这里还有另一个值得考虑的选择:

使用SqlCacheDependency类,以便当基础数据更新缓存失效。很显然,这与选项2的结果类似。

虽然我可能实际上必须同意Agileguy - 您的查询描述看起来很简单。在你设计的时候思考和记住缓存是一个好主意,但是你是否证明你现在需要它?假设你现在没有真正处理重大的性能问题,选项3似乎比选项1好得多。

+0

是的我忘了提及这一点,我会为这个问题添加一条评论。现在看看你的建议:) – Phil 2009-09-02 14:53:54

+0

也许你应该看看ORM工具(例如NHibernate),它具有用于缓存数据的嵌入机制。 – dariol 2010-01-22 23:07:33

4

过早的优化是所有罪恶的根源;)

这就是说,如果你要缓存我会使用根据各地选项的解决方案2.

您有机会少以这种方式“脏”的数据。

善良,

0

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

如果你不能这样,第一也许是可以接受的。经过一些调整(即 - 我会尝试在另一个线程上默认更新缓存,当它超时),它可能工作得很好(如果数据允许有点旧)。

如果可能,切勿删除缓存。每个人都知道“不成熟的优化......”诗句,但缓存是可以显着提高应用程序可伸缩性/性能的其中一件事。