PHP对象缓存性能(PHP Object Caching performance)

2019-07-28 22:04发布

是否有在磁盘上,而不是不缓存PHP对象之间的区别? 如果缓存,只为所有的网站访问者来创建对象一次,如果没有,他们会为每一位旅客创建一次。 是否有这样的性能差异还是会被我浪费时间做这个?

基本上,当它归结为它的主要问题是:

在存储多个对象,每个用户(每个用户都有自己的一套实例化的对象)

VS

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

Answer 1:

是否有在磁盘上,而不是不缓存PHP对象之间的区别?

与所有性能的调整,你应该测量你正在做的,而不是盲目地执行一些巫术仪式,你不完全明白。 当您保存在一个对象$_SESSION ,PHP将捕获的对象的状态,并从它(系列化)生成一个文件。 在接下来的请求,PHP会再创建一个新对象,并用此状态下重新填充它。 这个过程不仅仅是创建对象昂贵得多,因为PHP将不得不作出的磁盘I / O,然后解析序列化的数据。 这有可能对读取和写入发生两者。

在一般情况下,PHP被设计成一个无共享架构。 这有其优点和缺点的,但试图以某种方式回避它,通常不是一个很好的主意。



Answer 2:

要使用这些对象,每个PHP脚本会无论如何都要反序列化他们。 所以它绝对不是用于储存你缓存它们在磁盘上存储的目的 - 它不会节省内存。

缓存这些对象的原因是当它太贵了创建对象。 对于一个普通的PHP对象,这种情况并非如此。 但如果对象表示一个昂贵的数据库查询,或从远程Web服务获取信息的结果,例如,它可能是有益的缓存在本地。

基于磁盘的缓存不一定是一个巨大的胜利。 如果你正在使用PHP和关心性能,你必须在操作码缓存环境,比如APC或Zend的平台上运行的应用程序。 这些工具还提供了缓存,您可以使用保存在您的应用程序PHP对象。 Memcached的也是一个快速的内存缓存应用程序数据的流行的解决方案。

同时请记住不是所有的PHP对象可以被序列化,所以它们保存在高速缓存,基于磁盘或内存是否是不可能对所有数据。 基本上,如果对象包含到PHP资源的引用,你可能无法序列化。



Answer 3:

我想你会浪费时间,除非该数据是静态的,复杂的产生。

假设您有表示ACL(访问控制列表),说明哪些用户级别有一定的资源权限的对象。

填充此ACL可能需要相当长的时间,特别是当数据来自数据库。 缓存的ACL可以被实例化快得多。



Answer 4:

我已经使用缓存SQL查询结果和时间密集的计算结果,并有不俗的业绩。 现在我正在上获取超过200个数据库记录(其中有一大把的SQL函数并在他们的计算)从表中有超过20万条记录的应用程序,从获取的数据计算结果,为每个请求。 我用Zend_Cache是​​组件Zend框架的缓存的计算结果,所以下次我并不需要:

  1. 连接到数据库
  2. 等待数据库服务器找到我的记录,我的计算SQL函数,返回的结果
  3. 获取至少200(甚至可以丰富1000)记录到内存
  4. 步过所有的这些数据和计算什么,我想要从他们

我只是做:

  1. 呼吁Zend_Cache是​​:: load()方法,将做一些文件读取。

这将节省我至少4-5秒对每个请求(非常不准确的,我其实没有轮廓的。但是性能提升相当明显)



Answer 5:

可以在某些情况下是有用的,但附带的影响进行仔细研究后其他种类的性能改进(如数据库查询,数据结构,算法等)。

你缓存查询应该是恒定的(和有限的数量)和数据,很静。 为了有效(并且值得的),您的硬盘接入需远远大于该数据的数据库查询速度更快。

我曾经用通过与负载较重的单实例DB上的主页回吐文件序列化高速缓存的对象,在相对静态的内容200+命中/秒,具有不可避免的查询(在我的水平)。 该主页上上涨了约40%的性能。

代码 - 当开发从划伤是非常快速和简单,与pile_put / get_contents和联合国/序列化。 您可以命名后,说出您的文件,您的查询的MD5校验。



Answer 6:

不幸的是,不是这个正确的答案。 对于同一网站同一解决方案在同一台服务器上可以提供更好的性能还是差了很多。 这真的取决于太多的因素(应用程序,软件,硬件,配置,服务器负载等)。

要记住的要点是: - 一台服务器中最慢的部分是硬盘驱动器。 - 创建对象是远远比磁盘访问更好。

=>保持尽可能从HD和缓存数据可能在RAM如果可能的话。

如果您没有性能问题,我会建议做什么都没有。

如果您有性能问题:标杆,标杆,标杆。 (唯一的真正的方法找到一个更好的解决方案)。

有关该主题的有趣视频: YouTube的可扩展性



Answer 7:

在内存中缓存中的对象通常是更好,然后在磁盘上:

http://code.google.com/p/php-object-cache/

然而,基准为自己和比较的结果。 那是他们唯一可以肯定知道。



文章来源: PHP Object Caching performance