7

在决定何时以及如何进行缓存时,您会考虑哪些问题、流程和问题。总是没有胜利的情况吗?

这假设您被困在已优化的代码库中。

4

8 回答 8

3

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

  • 所有用户都需要查看缓存的内容吗?
  • 每个内容的变化频率如何?
  • 我可以缓存整个页面吗?
  • 我需要手动清除缓存吗?
  • 我可以为整个站点使用单个缓存机制,还是需要多个解决方案?
  • 如果信息以某种方式过时,会产生什么影响?
于 2008-09-22T14:35:10.340 回答
1

我会查看您的网站/应用程序的每个功能,并为每个功能确定:

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

我个人会反对缓存整个页面,而是支持缓存网站/应用程序的部分。

于 2008-09-22T14:29:39.667 回答
1

首先,如果您的代码按照您所说的进行了优化,那么只有在站点受到大量请求的冲击时,您才会看到显着的性能优势。

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

至于知道什么时候需要缓存,考虑到即使是低端的现代 Web 服务器每秒也可以处理数百个请求,所以除非您期望有大量的流量,否则缓存可能是您可以跳过的。

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

至于适合缓存或缓存变得困难的场景......如果您尝试缓存显示当前日期和时间的动态页面,您将不断看到旧日期/时间,除非您获得更多地涉及您的缓存策略。所以这是需要考虑的事情。

于 2008-09-22T14:34:12.387 回答
0

您使用什么语言?使用 ASP,您只需在方法上添加一些属性标记即可进行一些非常简单的缓存,并且根据时间缓存值。

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

于 2008-09-22T14:32:50.910 回答
0

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

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

于 2008-09-22T14:35:09.873 回答
0

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

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

您可以缓存您知道不会经常更改的静态内容。如果您有每天刷新的前 10 名,那么您可以将所有内容存储在缓存中并每天更新。

于 2008-09-22T14:35:21.527 回答
0

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

这意味着您可以将生成页面所需的所有内容存储在内存中(持久写入数据库)并在没有任何数据库 IO 的情况下生成页面。

您仍然需要使用页面构建逻辑来生成页面,但是您可以节省大量获取数据的时间。

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

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

于 2008-09-22T14:35:53.070 回答
0

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

客户端缓存对于某些东西来说是不费吹灰之力的,比如静态 HTML、SWF 和图像。找出资产可能更改的频率,并酌情设置“过期”标题。(2 天?2 周?2 个月?)

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

取决于您的情况,数据库和应用程序级别的缓存可能有效,也可能无效。这真的取决于你的瓶颈在哪里。找出您的应用程序在页面渲染上花费最多时间的位置可能是优先级 1,然后您可以开始查看缓存的位置和方式。

于 2008-09-22T15:31:15.760 回答