在网上缓存的策略?

时间:2008-09-22 14:26:20

标签: caching

在决定何时以及如何缓存时,您会考虑哪些问题,流程和问题。这总是一场没有胜利的局面吗?

这预示着您已经陷入了已优化的代码库。

8 个答案:

答案 0 :(得分:3)

我最近一直在使用DotNetNuke用于Web应用程序,每次实现缓存解决方案时都会考虑很多事情。

  • 是否所有用户都需要查看缓存内容?
  • 每一段内容的变化频率如何?
  • 我可以缓存整个页面吗?
  • 我是否需要手动方式来清除缓存?
  • 我可以为整个网站使用单一缓存机制,还是需要多种解决方案?
  • 如果信息以某种方式过时会产生什么影响?

答案 1 :(得分:1)

我会根据每个功能查看您的网站/应用程序的每个功能:

  • 是否应缓存?
  • 它应该缓存多长时间?
  • 什么时候应该清除缓存?

我个人反对缓存整个页面,转而使用网站/应用程序的缓存部分。

答案 2 :(得分:1)

首先,如果您的代码按照您的说法进行了优化,那么当网站受到大量请求的攻击时,您只能看到显着的性能优势。

但是,从RAM中提取资源比从磁盘提取资源更快,因此如果您有缓存策略,您的Web服务器将能够处理更多请求。

至于知道何时需要需要缓存,请考虑即使是低端的现代Web服务器也可以处理每秒数百个请求,因此除非您期望获得相当大的流量,否则缓存是可能你可以跳过的东西。

此外,如果您从数据库中提取内容(例如,StackOverflow可能会这样做),缓存可能非常有用,因为数据库操作相对昂贵,并且在大量情况下可能是一个巨大的瓶颈。

对于适合缓存或缓存变得困难的情况......如果您尝试缓存动态页面,例如显示当前日期和时间,您将不断除非您更多地参与缓存策略,否则请查看旧日期/时间。所以这是值得考虑的事情。

答案 3 :(得分:0)

您使用的是哪种语言?使用ASP,您可以轻松地进行缓存,只需在方法上添加一些属性标记,并根据时间缓存值。

如果您想要更多地控制缓存,可以使用一些流行的系统,如MemCached,并控制时间或事件。

答案 4 :(得分:0)

Yahoo例如“versions”他们的JavaScript,因此您的浏览器会下载 code-1.2.3.js ,当出现新版本时,他们会引用该版本。通过这样做,他们可以使他们的Javascript代码可以在很长一段时间内缓存。

至于一般的答案,我认为这取决于你的数据,它取决于它的变化频率。例如,图像不会经常更改,但html页面会更改。 “关于我们”页面不会经常更改,但新闻部分会更改。

答案 5 :(得分:0)

您可以按时间缓存。这对于快速变化的数据非常有用。您可以将时间设置为30秒或1分钟。当然,这需要一些流量。你有更多的流量,你可以玩更多的时间,因为如果你每小时有1次访问,这次访问将填充缓存而不是使用它...

您可以按事件缓存...如果您的数据发生更改,您更新缓存...如果数据需要非常快速地为用户准确,这是非常有用的。

您可以缓存您知道不会更改的静态内容。如果您每天刷新的前10天,那么您可以将所有内容全部存入缓存并每天更新。

答案 6 :(得分:0)

如果可用,请注意整个对象内存缓存。在ASPNET中,这是一个内置功能,您可以在IIS应用程序中植入业务逻辑对象并从那里访问它们。

这意味着您可以存储在内存中生成页面所需的一切(持久写入数据库)并生成不带 ANY 数据库IO的页面。

您仍然需要使用页面构建逻辑来生成页面,但是您在获取数据时节省了批次

其他技术涉及本地化输出缓存,您可以在发送之前捕获输出并将其保存到文件中。这非常适用于静态部分(如某些页面上的导航或文本正文),并在请求时将它们包括在内。大多数实现在写入时或在一段时间后清除缓存对象。

然后是最不“准确”的:整页缓存。它是表现最好的,但除非你有非常简单的页面,否则它几乎没用。

答案 7 :(得分:0)

什么样的缓存?服务器端缓存?客户端缓存?

客户端缓存对于某些事情是很明智的,例如静态HTML,SWF和图像。找出资产可能更改的频率,并根据需要设置“过期”标头。 (2天?2周?2个月?)

根据定义,动态页面有点难以缓存。在使用Javascript缓存某些块时已经进行了一些探索(如果JS不可用,则会降级到IFrame。)但是,这可能会更难以改造到现有站点。

数据库和应用程序级缓存可能会或可能不会起作用,具体取决于您的具体情况。这真的取决于你的瓶颈所在。确定您的应用程序在页面呈现上花费最多时间的位置可能是优先级1,然后您可以开始查看缓存的位置和方式。