【问题标题】:Performance difference of caching PHP Objects on file在文件中缓存 PHP 对象的性能差异
【发布时间】:2009-06-17 14:33:47
【问题描述】:

在磁盘上缓存 PHP 对象和不缓存有区别吗?如果缓存,对象只会为所有站点访问者创建一次,如果没有,它们将为每个访问者创建一次。这有性能差异还是我会浪费时间这样做?谢谢你:)

【问题讨论】:

  • 感谢那些已经回答的人,但这里有更多关于我在做什么的信息。 APC 现在不可用,因为我是在 windows 平台上开发的,所以我还没有为 APC 开发缓存方法。对于 Windows,我决定缓存到文件而不是 memcached,因为 memcached 需要我安装一些额外的文件,这是我不希望我的程序需要的。至于我缓存的原因,我将缓存访问者在浏览网站时将使用的对象,一个示例是数据库类。 (续)
  • 我计划使用 __sleep 和 __wake 魔术函数来正确序列化和反序列化数据库对象。我还计划缓存模板、错误处理类等对象,因为所有访问该站点的用户都需要这些对象。知道了这一点,缓存对这些对象会更好吗?
  • 为什么不将它们存储在 PHP 会话中?
  • 我也在考虑这个问题,但是将它们存储在 PHP 会话中意味着必须在每个用户的会话中为每个用户存储一个 PHP 对象。我想知道的是,为每个用户创建对象比缓存对象更好,这样所有用户都可以使用该对象的一个​​实例,反之亦然。
  • 呃。取决于对象。如果可以共享一个实例,那么您可以节省存储空间……但这取决于用户是否更改了对象。您将读取/写入创建瓶颈的对象。如果没有更多信息,您将不得不在此处查找理论。

标签: php oop caching object


【解决方案1】:

性能归结为后续使用,因此即使您的对象被缓存一次并被所有人使用......或每个访问者缓存一次......它是后续使用很重要。如果您的缓存对象每天使用 10,000,000 次,那么您将节省。

如果缓存对象被使用一次或根本不使用,增益可以忽略不计。

【讨论】:

    【解决方案2】:

    是这样的: 文件比数据库快得多。 内存比文件快得多(当不交换磁盘空间时)。

    因此,将您最需要的内容缓存到内存中,并尝试思考何时需要努力缓存到文件中。

    记住:过早的优化通常不是最好的做法。

    【讨论】:

      【解决方案3】:

      您必须考虑到动态内容在发生变化时必须被缓存。但是,对于静态内容,使用缓存内容要快得多,尤其是在数据库架构、配置等方面。

      【讨论】:

        【解决方案4】:

        假设它们是大对象,特别是如果它们是基于从数据库中提取的数据构建的,那么缓存是一个好主意。对于我对特定实例进行的一些测试,构建对象、将其写入文件并从文件中加载比每次都去数据库要快。

        但是:有比写入文件更好的方法。您可能最好使用 memcached 或 APC 将对象存储在内存中,并且不要忘记您可能会遇到文件锁定问题,因为有几个人同时访问该站点。

        【讨论】:

          【解决方案5】:

          当缓存未命中时,在磁盘上缓存对象会给您带来额外的磁盘写入开销,而在缓存命中时,您将能够节省实例化对象的步骤。

          如果对象的构造足以承担保存它的负担,有时会超过磁盘写入的额外负担,那么继续并缓存在磁盘上。

          不过,我很想知道为什么实例化对象的成本如此之高,以至于您想要这样做。

          【讨论】:

            【解决方案6】:

            @艾登·贝尔

            嗯。取决于对象。如果可以共享一个实例,则可以节省存储空间……但这取决于用户是否更改了对象。您将读取/写入创建瓶颈的对象。如果没有更多信息,您将不得不在此处查找理论。 – Aiden Bell 11 分钟前

            -- 这些实例没有用户可以更改的数据,但是,它们将包含整个站点的用户将使用的数据。

            基本上,归根结底,主要问题是:

            内存中的多个对象,每个用户(每个用户都有自己的一组实例化对象)

            VS

            为所有用户缓存在文件中的单个对象(所有用户使用相同的对象,例如,相同的错误处理程序类、相同的模板处理程序类和相同的数据库句柄类)

            --

            你好,还有人有什么想法吗?

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-11-26
              • 1970-01-01
              • 1970-01-01
              • 2011-08-20
              • 1970-01-01
              • 2013-05-08
              • 2021-12-14
              • 2012-07-16
              相关资源
              最近更新 更多