【问题标题】:Best method to cache objects in PHP?在 PHP 中缓存对象的最佳方法?
【发布时间】:2010-05-28 18:32:05
【问题描述】:

我目前正在开发一个处理用户注册的大型网站。为了争论而建立的社交网站。但是,我注意到页面加载存在延迟,并发现是在页面上创建对象导致速度变慢。

例如,我有一个 Member 对象,当使用作为构造参数传递的 ID 实例化它时,它会在数据库中查询成员数据库表中该成员的行。不错,但是每次加载页面时都会创建它;并且不止一次调用,比如调用该特定成员的朋友的数组,因为为每个朋友创建了一个新的 Member 对象。

所以在一个页面上我可以有超过七个相同的对象,但包含不同的属性。

我想做的是找到一种方法来减少数据库负载,并允许在页面加载之间保留对象。例如,登录用户的对象将在登录时创建(我可以这样做),然后存储在某个地方以供检索,因此我不必在页面加载之间不断重新创建对象。

对此最好的解决方案是什么?我看过 Memcache,但由于它是一个第三方模块,我不能让网络主机在这种情况下安装它。在我的情况下,我的替代方案和/或最佳做法是什么?

提前致谢。

【问题讨论】:

标签: php class caching object


【解决方案1】:

我相信缓存从数据库接收到的数据通常更好,而不是 PHP 对象本身。无论哪种方式,APCMemcacheXCache 都是存储它的方式。

【讨论】:

  • 为什么不是对象本身?您必须在每次请求时再次将 DB 数组转换为对象,并且无论如何它仍然必须被序列化/反序列化。
  • 使用APC或MemCache,对象加入缓存时自动序列化,取出时反序列化
【解决方案2】:

如果您的缓存要求全部与用户/成员对象有关,则最好将其缓存在用户会话中。由于用户离线时不需要该对象;注销或会话超时将完成所有垃圾收集工作。如果您需要更快的速度,您可以为会话存储后端使用缓存解决方案(即 APC、Memcache 等)。

如果您使用的是 ORM,您可以直接缓存 ORM 对象,这样您甚至不需要重新获取它来更新配置文件。

【讨论】:

  • 感谢您的回答。但是,鉴于这个问题已经存在三年了,我已经继续前进,不再从事该项目;)
  • 不客气,马丁!我猜你已经继续前进了,但是想为从搜索引擎来到这里的其他人写下我的答案;-)
猜你喜欢
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 2015-12-02
相关资源
最近更新 更多