Php 缓存是否适合此场景?
因此,我有一个PHP CodeIgniter Web应用程序,正在尝试决定是否合并缓存 请容忍我的这一点,因为我很高兴地承认我不完全理解缓存Php 缓存是否适合此场景?,php,codeigniter,caching,Php,Codeigniter,Caching,因此,我有一个PHP CodeIgniter Web应用程序,正在尝试决定是否合并缓存 请容忍我的这一点,因为我很高兴地承认我不完全理解缓存 因此,第一个用户加载一页用户提交的内容。加载它“慢”需要0.8秒(处理)。然后,下一个用户加载相同的页面,需要0.1秒才能从缓存中“快速”加载该页面 第三个用户加载它,执行时间也为0.1秒。此用户决定对页面进行评论 第四个用户在2分钟后加载它,但没有看到第三个用户的评论,因为在缓存过期之前还有50分钟 在这种情况下你会怎么做?在这样的页面上合并缓存值得
- 因此,第一个用户加载一页用户提交的内容。加载它“慢”需要0.8秒(处理)。然后,下一个用户加载相同的页面,需要0.1秒才能从缓存中“快速”加载该页面
- 第三个用户加载它,执行时间也为0.1秒。此用户决定对页面进行评论
- 第四个用户在2分钟后加载它,但没有看到第三个用户的评论,因为在缓存过期之前还有50分钟
杰克你想要一个更好的缓存 通常,您永远不应该达到缓存的超时。相反,某些用户驱动的操作将使缓存无效 因此,如果您有这样一个场景:
我不是一个CodeIgniter的人,所以我不确定这个框架能为您做些什么,但是上面的内容通常是应该发生的。您的应用程序应该有足够的内置smarts,以便在写入需要缓存失效的数据时使缓存项失效。而CI只提供页面级缓存,没有失效,我过去处理此问题的方式有些不同。处理这个问题最简单的方法是从缓存中加载所有重内容,而通过不可缓存的Ajax调用加载注释 或者你也可以研究解决这个问题的定制插件,就像你之前指出的那样
这一切都取决于您想要控制缓存的粒度。对于像博客这样的简单事情,通过外部ajax调用加载评论(按需-如用户明确请求评论)是最好的方法。试试CI。每次仍会呈现页面,但数据库结果会被缓存。。。可以使用本机CI功能(即没有第三方库)删除它们。有得必有失-此规则始终适用于处于完全缓存和不缓存之间的数据。调整缓存超时之前的持续时间将是一项必要的工作。因此,这完全取决于用户对所显示数据的“新鲜度”。在某些情况下,60分钟可能是不可接受的。另一方面,将一些数据缓存一个月不会有太大改变。思考:你不能在提交用户评论或类似操作时以编程方式删除缓存,对吗?你会这样做吗?编辑:我看到timdev也说过类似的话……是的,如果你想刷新缓存,请终止缓存条目。我想知道你或CodeIgniter在做什么,你的执行时间太长了。如果您只是从一些表中获取一些行,并通过一些模板文件处理它们,那么在一个合适的处理器上,您的执行时间应该在0.1秒以下,并且在0.02缓存下。谢谢@timdev,这真的很有帮助。因此,CodeIgniter的缓存系统没有包含缓存失效方法,但是,看起来有些用户已经在wiki上创建了自己的钩子:的确如此。我想更新我的答案。页面级缓存通常不是很有用。您可以研究较低级别的缓存。例如,mySQL的查询缓存非常容易设置,在某些情况下非常有用。您还可以在模型中编写自己的缓存逻辑。您可以查看Zend_缓存,它应该可以很好地与CI配合使用,而且非常好。