我有一个asp.net网站,每天有10-25,000名访客(节假日前的峰值超过6万)。页面/访问量也很高,因为它是一个内容网站。 我有几个特定的页面,产生约60%的流量。这些页面有点复杂,并且DB很重(sql server 2008 r2后端)。 我想知道是否值得“缓存”这些页面的静态版本(我听说这是可能的)并且只在某些内容发生变化时重新渲染它们(大约48小时一次)。 这听起来像个好主意吗?哪里是实施这个的最佳地点? (asp.net,iis,db)
更新:对我来说,一个很好的选择是带有SqlDependency的outputcache。我看到了某种用于使缓存无效的SQL服务器通知的引用,但我只看到有关SQL Server 2005的讨论。微软是否已弃用此选项?有任何新方法可以解决这个问题吗?
答案 0 :(得分:2)
缓存是一个广泛的术语,可以在许多不同的点上发生。最佳解决方案可以是部分或全部的组合。
例如,您可以按照here所述添加页面或输出缓存,它会在Web服务器上缓存输出,我认为这就是您所指的。
此外,您可以使用memcached等内容将数据缓存到内存中,以便在构建页面时Web服务器可以更多地使用您的数据,但是您需要查看缓存命中率才能知道确保您正在缓存正确的数据。
此外,虽然略微偏离了改进db重页的主题,但您可以使用内容交付网络缓存不经常更改的静态资源,如images,css和include文件。由于规模经济,任何CDN几乎肯定会拥有比您自己的连接更高的带宽和更便宜的数据计划,因此您可以从那里提供的内容越多越好。
你的第一个问题是“我想知道是否值得”缓存“这些页面的静态版本”。我想这个问题的答案取决于目前是否存在性能问题,以及问题的原因在哪里。如果快速可靠地提供页面,那么很可能不值得实现缓存。如果存在性能问题,那么它在哪里?它是在db读取时间内,还是在返回数据后构建页面所花费的时间?
答案 1 :(得分:1)
我在缓存方面没有太多经验,但我会尝试这样做:
我会查看您的统计信息并运行一些配置文件,查看哪些是运行最昂贵的SQL查询的访问量最大的页面。选择一个或两个最昂贵的页面。
如果页面是伪静态的,即没有数据,例如您登录的用户名,没有评论等,您可以缓存整个页面。您也可以设置一个相对较长的缓存,从1分钟到几个小时。
如果页面上有一些动态实时内容(例如注释),您可以识别静态控件并单独缓存它们。请勿在页面范围内放置缓存。
祝你好运,听起来像缓存可以提高性能。
答案 2 :(得分:1)
缓存可能会有所帮助,也可能没有帮助。例如,如果站点的流量较低,并且启用了缓存,则服务器会在提供请求之前进行处理以创建缓存。而且由于流量较低,连续请求之间可能存在足够的延迟。因此,缓存版本甚至可能会过期,服务器会再次创建一个新的缓存版本。此过程使响应速度比正常情况慢。 阅读更多信息:http://tipscow.com/caching-the-good-the-bad/
我自己也遇到过这个问题。
如果流量良好,缓存可以帮助您获得更好的加载时间。 干杯 阿迪亚