Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 缓存是否适合此场景?_Php_Codeigniter_Caching - Fatal编程技术网

Php 缓存是否适合此场景?

Php 缓存是否适合此场景?,php,codeigniter,caching,Php,Codeigniter,Caching,因此,我有一个PHP CodeIgniter Web应用程序,正在尝试决定是否合并缓存 请容忍我的这一点,因为我很高兴地承认我不完全理解缓存 因此,第一个用户加载一页用户提交的内容。加载它“慢”需要0.8秒(处理)。然后,下一个用户加载相同的页面,需要0.1秒才能从缓存中“快速”加载该页面 第三个用户加载它,执行时间也为0.1秒。此用户决定对页面进行评论 第四个用户在2分钟后加载它,但没有看到第三个用户的评论,因为在缓存过期之前还有50分钟 在这种情况下你会怎么做?在这样的页面上合并缓存值得

因此,我有一个PHP CodeIgniter Web应用程序,正在尝试决定是否合并缓存

请容忍我的这一点,因为我很高兴地承认我不完全理解缓存

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

  • 第三个用户加载它,执行时间也为0.1秒。此用户决定对页面进行评论

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

在这种情况下你会怎么做?在这样的页面上合并缓存值得吗

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

我知道这仍然只是毫秒的问题,但即使如此


杰克

你想要一个更好的缓存

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

因此,如果您有这样一个场景:

  • 乔第一次(有史以来)加载该页面。没有缓存,因此需要一段时间,但结果会一直缓存
  • Mary从缓存中快速加载页面
  • 玛丽补充说。注释被添加到数据库(或其他任何地方),软件会使缓存失效
  • Pete出现并加载页面,缓存无效,因此需要一秒钟来呈现页面,结果被缓存(作为有效的缓存项)
  • 山姆来了,页面加载很快
  • 珍妮来了,页面加载得很快

  • 我不是一个CodeIgniter的人,所以我不确定这个框架能为您做些什么,但是上面的内容通常是应该发生的。您的应用程序应该有足够的内置smarts,以便在写入需要缓存失效的数据时使缓存项失效。

    而CI只提供页面级缓存,没有失效,我过去处理此问题的方式有些不同。处理这个问题最简单的方法是从缓存中加载所有重内容,而通过不可缓存的Ajax调用加载注释

    或者你也可以研究解决这个问题的定制插件,就像你之前指出的那样


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

    试试CI。每次仍会呈现页面,但数据库结果会被缓存。。。可以使用本机CI功能(即没有第三方库)删除它们。

    有得必有失-此规则始终适用于处于完全缓存和不缓存之间的数据。调整缓存超时之前的持续时间将是一项必要的工作。因此,这完全取决于用户对所显示数据的“新鲜度”。在某些情况下,60分钟可能是不可接受的。另一方面,将一些数据缓存一个月不会有太大改变。思考:你不能在提交用户评论或类似操作时以编程方式删除缓存,对吗?你会这样做吗?编辑:我看到timdev也说过类似的话……是的,如果你想刷新缓存,请终止缓存条目。我想知道你或CodeIgniter在做什么,你的执行时间太长了。如果您只是从一些表中获取一些行,并通过一些模板文件处理它们,那么在一个合适的处理器上,您的执行时间应该在0.1秒以下,并且在0.02缓存下。谢谢@timdev,这真的很有帮助。因此,CodeIgniter的缓存系统没有包含缓存失效方法,但是,看起来有些用户已经在wiki上创建了自己的钩子:的确如此。我想更新我的答案。页面级缓存通常不是很有用。您可以研究较低级别的缓存。例如,mySQL的查询缓存非常容易设置,在某些情况下非常有用。您还可以在模型中编写自己的缓存逻辑。您可以查看Zend_缓存,它应该可以很好地与CI配合使用,而且非常好。