不使用序列化在PHP中缓存对象

jW.*_*jW. 10 php serialization caching

我有一个复杂的对象,我在PHP脚本中创建.我正在寻找一种方法来存储此对象,以便后续请求不必重新创建它,或花时间反序列化和重建它.使用xdebug我发现我花了整个请求时间的一半来构建这个对象.即使我将对象显式地存储在APC(或memcache)中,对它进行反序列化并加载所有类的时间几乎与创建对象的时间一样长.

我不知道是否可以存储并稍后在PHP中加载"已编译"的对象.这可能吗?还有其他解决方案吗?

我不确定这是可能的,但我想我应该问社区.

编辑:对象是二叉树,用作决策树.代码基本上是从树快速返回答案所需的API.这一切都需要以不断增长的速度执行,因此我尽可能地最大化性能.

小智 9

据我所知,如果没有序列化,就不可能在PHP中缓存对象.但是,一般情况下,缓存机制(APC,Memcache等)确实试图删除数据库连接而不是提高性能(从而降低整体数据库应变).对于Drupal来说,这肯定是memcache等的用法.换句话说,缓存机制应该允许您扩展,尽管它们可能不会特别提高性能.
实现缓存机制应该允许您更容易地向外扩展,即使每台机器的性能对于单个连接而言并不比以前更好.在某个阈值时,DB性能将急剧下降,缓存机制应该有助于缓解该问题.


cod*_*ate 6

查看Igbinary PHP扩展.它是序列化和反序列化的替代品,它可能适合您的需求.

它以二进制格式存储对象,而不是字符串,这会减少内存使用量,还会减少序列化和反序列化对象的时间.

虽然这确实经历了反序列化对象的过程,但二进制格式可能会提高性能,使此过程在您的应用程序中使用合理.