这是在php中实现对象持久性的好方法

时间:2012-03-27 07:24:20

标签: php oop memcached

大家好我试着在一个以上的php页面上获取一个全局/持久的对象,这样我就不需要每次都加载它了。

我读了很多但是在我不确定的那一刻,现在这是实现这一目标的最佳方式,当对象有点大时,例如10个多维数组,每个变量100个或更多。

  1. 我认为最简单的方法是使用会话,序列化和反序列化它。但是表现如何呢?

  2. 将对象存储在数据库中并发送查询以获取其值。也许会话更快但处理不那么舒服?

  3. 存储对象memcached,但这只是一个很好的解决方案,如果我有足够的。我有一个问题。这里有什么意思?在文档中没有任何有关它的方便信息。我的托管服务器有8 GB内存......

  4. 将对象存储在硬盘上。也许是最慢的方式?

  5. 5。 另一种方法?

    我感谢任何帮助,链接,教程,可能是性能检查等等,以便更好地理解这一点。也许你们其中一个人可以解释我应该选择哪种方法以及为什么。

    Thanx ruven

4 个答案:

答案 0 :(得分:0)

<强> @Ruven:

最好和最快的方法是将数据保存在RAM中。所以认为有更多的解决方案。

您可以按照自己的说法使用会话,并将会话处理程序设置为memcache。然后,所有会话数据都自动存储在memcache中。

第二种方法是在数据库中创建一个“MEMORY”表,并将数据存储在该表中。然后会话存储在RAM中,但如果重新启动服务器,则MEMORY表中的数据将丢失。

最简单的方法是将memcache设置为会话处理程序,但我对此处有更多想法感兴趣。

答案 1 :(得分:0)

实际上默认的http会话在文件系统上写会话数据所以我将删除选项4,因为选项1应该在性能方面等于并且易于管理。

我建议使用memcache作为memchace存储数据主要存储在内存RAM中。在memchached下,可以像数据库一样设置持久层。这样即使你完成了记忆的可用内存,你也不会丢失数据。

答案 2 :(得分:0)

  

我认为最简单的方法是使用会话,序列化和反序列化它。但是性能如何?

次优,我认为这甚至不是最简单的方法。我认为使用APC可以大大提高性能,使用apc_store($ name,$ var)并不比在会话中放置东西困难得多。

答案 3 :(得分:0)

根据对象生命周期的持续时间,我会选择Memcached或Redis。

Memcached,如果对象可以存活几分钟或几小时,并且可以安全地从缓存中清除并在代码中重建,因为memcached中的对象具有到期时间,并且如果没有,则可以随时覆盖足够的记忆。

Redis,就像memcache一样,但是如果你需要你的对象活得更久,它有更多的数据类型和持久层。您的对象将基本上存储在内存中,但在必要时序列化为硬盘驱动器。项目到期存在,但是可选的。有关详细信息,请参阅http://redis.io/