【问题标题】:Is caching a good idea? If so, where?缓存是个好主意吗?如果有,在哪里?
【发布时间】:2011-07-29 20:38:27
【问题描述】:

我有一个 asp.net 网站,每天有 10-25k 的访问者(假期前的高峰期超过 60k)。页面/访问量也很高,因为它是一个内容网站。 我有一些特定的页面产生了大约 60% 的流量。这些页面有点复杂,而且数据库很重(sql server 2008 r2 后端)。 我想知道是否值得“缓存”这些页面的静态版本(我听说这是可能的)并且仅在发生变化时重新渲染它们(大约每 48 小时一次)。 这听起来是个好主意吗?哪里是实现这一点的最佳地点? (asp.net, iis, db)

更新: 对我来说,一个不错的选择是带有 SqlDependency 的 outputcache。我看到了有关使缓存失效的某种 SQL 服务器通知的引用,但我只看到有关 SQL Server 2005 的讨论。Microsoft 是否已弃用此选项?有什么新方法可以解决这个问题吗?

【问题讨论】:

  • 这个页面是否有任何部分是动态的或它们都是静态数据?例如,有用户名的任何部分,或者有多少用户在线?
  • @Aristos - 不。我们没有会员制度。我们只在一个特定的物理 aspx 文件上使用成员资格,该文件访问量不大,它是我们自己的实现。
  • @Jackson Pope - 感谢您的编辑 :)
  • 那就去用asp.net自带的最简单的缓存方式,delcare
  • @Aristos - 如果我不希望“转储”基于时间?还有其他选择吗?就像通过更改数据库或程序触发器一样?这实际上会在内存中保留 aspx 的静态版本(在 HTML 中)吗?没有数据库调用等?

标签: asp.net iis caching


【解决方案1】:

缓存是一个广义的术语,可以在多个不同的点发生。最佳解决方案可以是一些或全部的组合。

例如,您可以添加页面或输出缓存,如 here 所述,它将输出缓存在 Web 服务器上,我认为这就是您所指的。

此外,您可以使用memcached 之类的方式将数据缓存在内存中,这样您的数据在 Web 服务器构建页面时更易于使用,但您需要查看缓存命中率才能确定您正在缓存正确的数据。

此外,虽然稍微偏离了改进 db 重页的主题,但您可以使用内容交付网络缓存不经常更改的静态资源,例如图像、css 和包含文件。由于规模经济,任何 CDN 几乎肯定会比您自己的连接拥有更高的带宽和更便宜的数据计划,因此您可以从那里提供的内容越多越好,一般来说。

您的第一个问题是“我想知道是否值得“缓存”这些页面的静态版本”。我想这个问题的答案取决于目前是否存在性能问题,以及问题的原因在哪里。如果页面被快速可靠地提供,那么很可能不值得实现缓存。如果存在性能问题,那么问题在哪里?是在数据库读取时间,还是在数据返回后构建页面所花费的时间?

【讨论】:

  • 感谢您的意见。我想我正在研究 Web 服务器级别的缓存。 Memcached 和 CDN 是一个很好的解决方案,但似乎适用于具有分布式 Web 服务器等的大容量网站 (IMO)。我认为它们现在对我来说都是最重要的。
  • 重新阅读您的问题后,我添加了另一段。希望对您有所帮助。
  • 就数据库而言,我决定对优化时间/现金的最佳利用是确保所有内容都被缓存。由于整个数据库大约 300MB 并且增长非常缓慢,我只添加了另外 2GB 的内存,并且我得到了非常高的 foundincache 数字。现在的主要问题是页面本身的构建。由于它由多个用户控件组成,因此渲染会占用大量的请求处理时间。 p.s.感谢您花时间编辑您的答案。
【解决方案2】:

我在缓存方面没有太多经验,但我会尝试这样做:

  • 我会查看您的统计数据并运行一些配置文件,看看哪些是运行最昂贵的 SQL 查询的访问量最大的页面。选择一两个最昂贵的页面。

  • 如果页面是伪静态的,即上面没有你登录的用户名、没有 cmets 等数据,你可以缓存整个页面。您也可以设置一个相对较长的缓存,从 1 分钟到几个小时不等。

  • 如果页面上有一些动态实时内容,例如 cmets,您可以识别静态控件并单独缓存它们。不要放置页面宽缓存。

祝你好运,听起来缓存可以提高性能。

【讨论】:

  • 第一点:我已经完成了我的家庭作业:) 第二点:我宁愿缓存的污染不是基于时间的。第三点:我看到您可以在每个用户控件级别定义缓存。由于大部分页面由不同的用户控件组成,如果需要,我可以缓存一些而不是其他的。
【解决方案3】:

缓存可能有帮助,也可能没有帮助。例如,如果站点的流量较低并且启用了缓存,则服务器会在处理请求之前创建缓存。而且由于流量很低,连续请求之间可能会有足够的延迟。所以缓存版本甚至可能过期,服务器会再次创建一个新的缓存版本。此过程使响应比正常情况更慢。 Read more: Caching - the good, the bad.

我自己也遇到过这个问题。

如果流量良好,缓存可以帮助您缩短加载时间。 干杯 阿迪亚

【讨论】:

    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 2010-11-05
    • 2021-08-19
    相关资源
    最近更新 更多