缓存是否适合这种情况?

时间:2010-08-15 21:21:21

标签: php codeigniter caching

所以我有一个PHP CodeIgniter webapp,我正在尝试决定是否合并缓存。

请耐心等待我,因为我很高兴地承认我并不完全理解缓存!

  • 因此,第一个用户加载了一页用户提交的内容。加载'慢'需要0.8秒(处理)。然后,下一个用户加载同一页面,从缓存中“快速”加载它需要0.1秒。

  • 第三个用户加载它,也需要0.1秒的执行时间。此用户决定对该页面发表评论。

  • 第四个用户在2分钟后加载它,但没有看到第三个用户的评论,因为在缓存过期之前还剩下50分钟

在这种情况下你做了什么?是否值得在这样的页面上加入缓存?

我想使用缓存的原因是因为我运行了一些测试。 没有缓存,我的页面平均执行时间为0.7864秒。 使用缓存,平均花费0.0138秒。 这是5599%的改善!

我知道它仍然只是几毫秒,但即便如此......

杰克

3 个答案:

答案 0 :(得分:6)

您需要更好的缓存。

通常,您永远不应达到缓存的超时时间。相反,一些用户驱动的操作将使缓存失效

所以如果你有这样的场景:

  1. Joe第一次加载页面(永远)。没有缓存,因此需要一段时间,但结果会在此过程中缓存。
  2. Mary加载页面,并从缓存中快速加载。
  3. Mary发表评论。注释将添加到数据库(或其他),软件使缓存无效
  4. Pete出现并加载页面,缓存无效,因此渲染页面需要一秒钟,结果将被缓存(作为有效的缓存条目)
  5. Sam来了,页面加载速度快
  6. Jenny出现,页面加载速度快。
  7. 我不是CodeIgniter的人,所以我不确定该框架会为你做什么,但上面通常会发生什么。您的应用程序应具有足够的内置智能,以便在写入需要缓存失效的数据时使缓存条目无效。

答案 1 :(得分:1)

尝试使用CI query caching。页面仍然每次都呈现,但DB结果被缓存...并且可以使用本机CI功能(即没有第三方库)删除它们。

答案 2 :(得分:0)

虽然CI仅提供页面级缓存,但没有失效,我曾经以不同的方式处理此问题。处理此问题的最简单方法是从缓存中加载所有繁重的内容,而通过非缓存的Ajax调用加载的注释。

或者您可以查看解决此问题的自定义插件,就像您之前指出的那样。

这一切都取决于您想要控制缓存的粒度。对于像博客这样的简单事情,通过外部ajax调用加载注释(按需 - 就像用户明确请求注释一样)是最好的方法。

相关问题