php中怎么存储对象,在PHP中的请求之间存储对象而无需序列化

在PHP中,当需要在不同请求间保持对象状态时,通常使用$_SESSION或序列化。然而,序列化和反序列化大型对象会带来性能开销。文章探讨了使用APC(Alternative PHP Cache)作为潜在解决方案,但APC仍然需要序列化对象。作者考虑了igbinary扩展以提高序列化效率,并指出在大量对象存储时,会话内容越多,启动请求所需时间越长。尽管存在HipHop解释器的传闻,但没有找到实际示例。解决方案建议使用igbinary来优化对象存储的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在用PHP编写一个有状态的Web应用程序,其中该状态可能包含许多对象.目前,我将所有这些对象保留在$_SESSION中,并在请求结束时将它们序列化.这有点痛苦,因为序列化整个会话需要几秒钟,而反序列化则需要更多时间.

我想尝试APC,因为我希望这些对象只是被复制而不是序列化. las,看来,如果我喂apc_store($object)一个对象,则似乎在将其传递给另一个进程之前无论如何都要对其进行序列化. (有故事说原始值和数组无需序列化即可进行内存复制,但这对我来说不是一个合适的解决方案,因为我的会话对象有很多(循环)引用.)

我的问题:是否存在一种已知的方法来保持对象在PHP中的持久性,而不必在每次请求后都将其序列化?我听说有传言说HipHop解释器可以解决这个问题,但是我在网上找不到任何有效的示例.有人可以告诉我PHP是否有可能吗?

(我知道,我应该用Java或其他支持无TCP连接的持久实例的语言编写该项目)

解决方法:

每当您需要存储(冻结)对象时,都需要对其进行序列化.这与存储(APC,会话文件,数据库等)无关,这是因为脚本进程将终止,并且下次启动时,对象需要重新恢复生命.

所以事情不能保持在“运行状态”,对象将总是被序列化存储.

众所周知,PHP序列化并不是最快的.您可以使用其他替代实现,例如igbinary PHP extension.它在透明会话处理旁边提供了序列化/反序列化功能.也许这实际上对您的情况很有帮助.

无论如何:在会话中存储的内容越多,在请求开始时解冻或唤醒所需的时间越多,花费的时间就越多.

标签:persistent-storage,serialization,php,state

来源: https://codeday.me/bug/20191208/2089041.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值