【问题标题】:Caching strategy, Output Cache vs Data Cache or both?缓存策略,输出缓存与数据缓存还是两者兼而有之?
【发布时间】:2010-10-08 05:15:25
【问题描述】:

我正在处理一个 ASP.NET MVC 项目,我已经到了要开始考虑我的缓存策略的地步。我试图让我的框架尽可能开放,以便在缓存中使用。

根据我在 Scott Hanselman 的播客中听到的消息,StackOverflow.com 使用页面输出缓存并压缩该内容并将其放入 RAM。这听起来很适合用户范围的缓存,但对于个性化页面之类的内容,您必须为每个用户缓存一个版本,这可能很快就会失控。

所以,对于缓存策略。应该使用哪个,输出缓存、数据缓存还是结合使用?我的第一个想法是两者都有,但就缓存依赖项而言,它听起来可能有点复杂。

【问题讨论】:

    标签: asp.net asp.net-mvc architecture caching outputcache


    【解决方案1】:

    我们正在大规模(每天 300 万次访问)网站(新闻门户)进行 API 和输出缓存。该站点主要由匿名用户使用,但我们确实有经过身份验证的用户,并且由于站点的一些个性化部分,我们为他们缓存了一个完整的站点,我必须承认我们在内存压力方面绝对没有问题。

    所以,我的建议是尽可能在 API 缓存中缓存所有内容,这样您的输出缓存重建速度会更快。

    当然,请密切注意性能计数器中的缓存比率值。您应该会看到 >95% 的缓存命中数。

    另外需要注意的是缓存失效,如果你有很多相关的内容,这是一个大问题。例如,您缓存音乐内容,有关一张专辑或歌曲的信息可能会显示并缓存在几百页上。如果该歌曲有任何变化,您必须使所有这些页面无效,这可能会出现问题。

    归根结底,缓存是 ASP.NET 的最佳特性之一,它做得非常出色,您可以信赖它。

    【讨论】:

    • 您使用的是网络农场吗?如果是这样,每个 Web 服务器是否都有自己的独立于其他 Web 服务器的 inproc 缓存?
    【解决方案2】:

    小心过度激进的缓存。虽然缓存是一种提高性能的工具,但如果使用不当,它实际上会使性能变差。

    如果不了解有关您项目的更多详细信息,我无法回答输出缓存或数据缓存是否更适合您。 我可以帮助提供几个示例,说明何时使用一个而不是另一个。

    如果您有一个经常在许多不同视图中使用的特定数据集,则最好使用数据缓存。如果您的数据获取操作相对于您的数据呈现非常常见且成本高昂,您将使用它。如果您有多个使用相同数据的视图,则可以节省数据获取时间。

    如果您有一个使用非常具体的数据集的视图,并且该视图的呈现很复杂,并且该视图被频繁地请求(例如,堆栈溢出的主页),那么您将从输出缓存中受益匪浅。

    所以最后,这真的取决于你的需求,小心使用不正确的缓存。

    【讨论】:

    • 查看 Kigg (codeplex.com/Kigg) 以获取作为 digg 克隆的 ASP.NET MVC 应用程序的示例。如果您的应用程序与 digg 克隆完全一样,那么我将输出缓存故事页面和主页。根据您的数据结构的外观,可能需要缓存用户信息。
    猜你喜欢
    • 2010-10-06
    • 2011-06-10
    • 2014-05-01
    • 2018-03-09
    • 2012-09-05
    • 2020-08-03
    • 2011-11-12
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多