asp.net mvc - 缓存

Posted

技术标签:

【中文标题】asp.net mvc - 缓存【英文标题】:asp.net mvc - caching 【发布时间】:2010-02-25 09:40:34 【问题描述】:

我正在研究使用 ASP.NET MVC 进行缓存,并且我也在最终确定 Web 主机。 我有两个问题...

1) 由于资源是共享的,所以在共享主机环境中进行缓存是否会造成问题?这个问题可能听起来很傻,但我只是不知道缓存在幕后是如何工作的。

2) 在我实现缓存之前,我想问一下这种方法是否有意义。我会尽可能多地缓存,并在需要时使其失效。但是,缓存如何处理非常频繁更新的项目列表,比如在一分钟内或其他时间。比如***的首页,每分钟都在添加这么多问题,首页真的可以缓存吗?

编辑:3)我还想讨论缓存如何与分页和所有工作一起工作。

【问题讨论】:

您必须对要缓存的项目进行分类。经常更新的东西不是缓存好。在 *** 的场景中,我不会让它成为可缓存的。诸如在他登录时设置站点范围内的用户帐户信息之类的东西,等等。这些东西可以被缓存。此外,如果您可以使用任何第三方缓存软件,最好使用 memcached 所以你是在暗示 memcached 比 ASP.NET 缓存更好? 它没有好坏那么简单。如果内置缓存可以满足您的需要,那么您将不会做得更好……但是,您应该做的是在缓存周围放置自己的包装器(作为接口)-这样更改起来很容易您需要的底层实现。 【参考方案1】:

如果您每秒处理 200 个请求,我认为一分钟很长,而且我认为 SO 使用 asp.net 输出缓存作为首页。他们也很可能使用某种donut caching 来缓存非用户特定的部分。

Asp.net MVC 使用标准的 ASP.NET 缓存提供程序不变。在共享主机上,缓存应该可以正常工作,但是请注意,如果主机选择在机器级别上,它们可以锁定缓存设置。缓存提供程序处理内存管理,如果内存使用率过高,将从缓存中删除项目。我建议您阅读有关缓存 here 的 MSDN 页面。

复杂性来自集群环境,而不是共享主机。在集群环境中,缓存不会分配给所有机器,因此每台机器都有一个单独的缓存副本。如果这会造成问题,那么您将需要研究分布式缓存解决方案,但在大多数简单的情况下,这很好。

关于分页,asp.net 的输出缓存功能允许您更改查询字符串,因此如果您有 www.url.com?page=1,它将与 www.url 分开存储在缓存中。 com?page=2.

【讨论】:

以上是关于asp.net mvc - 缓存的主要内容,如果未能解决你的问题,请参考以下文章

csharp ASP.net MVC:完全禁用缓存

ASP.NET MVC 视图和控制器输出缓存

ASP.NET MVC 阻止当前请求的视图页面缓存OutputCache

带有外部缓存提供程序的 ASP.NET MVC OutputCacheAttribute

过期输出缓存 ASP.Net MVC

ASP.NET MVC 中的数据缓存存储