Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是在php中实现对象持久性的好方法_Php_Oop_Memcached - Fatal编程技术网

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

这是在php中实现对象持久性的好方法,php,oop,memcached,Php,Oop,Memcached,大家好,我尝试在多个php页面上获得一个全局/持久对象,这样我就不需要每次都加载它 我读了很多书,但现在我不太确定,当对象稍微大一点时(例如,10个多维数组,每个数组包含100个或更多变量),这是实现这一点的最佳方法 我认为最简单的方法是使用会话,序列化并取消序列化。但是表演怎么样呢 将对象存储在数据库中并发送查询以获取其值。也许会更快,但在处理不是很舒服 将对象存储在memcached中,但这只是一个好的解决方案,如果我有足够的内存的话。我有一个问题。这里的“足够”是什么意思?在文档中没有关于

大家好,我尝试在多个php页面上获得一个全局/持久对象,这样我就不需要每次都加载它

我读了很多书,但现在我不太确定,当对象稍微大一点时(例如,10个多维数组,每个数组包含100个或更多变量),这是实现这一点的最佳方法

  • 我认为最简单的方法是使用会话,序列化并取消序列化。但是表演怎么样呢

  • 将对象存储在数据库中并发送查询以获取其值。也许会更快,但在处理不是很舒服

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

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

  • 五,。 另一种方法

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


    Thanx ruven

    @ruven:

    最好、最快的方法是将数据保存在RAM中。因此,我认为还有更多的解决方案

    您可以像前面所说的那样使用会话,并将会话处理程序设置为memcache。然后,所有会话数据自动存储在memcache中

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


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

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

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

    我认为最简单的方法是使用会话,序列化并取消序列化。但是表演怎么样呢


    次优,我认为这甚至不是最简单的方法。我认为使用($name,$var)将极大地提高性能,并且使用($name,$var)并不比在会话中放置一些东西困难多少

    根据对象的生存期长短,我会选择Memcached或Redis

    Memcached,如果对象可以存活几分钟或几小时,并且可以安全地从缓存中清除并在代码中重建,因为Memcached中的对象有一个过期时间,并且如果没有足够的内存,可以随时覆盖


    Redis,与memcache类似,但如果您需要对象的寿命更长,它具有更多的数据类型和持久性层。对象基本上存储在内存中,但在必要时序列化到硬盘。项过期存在,但是可选的。有关更多详细信息,请参阅。

    在会话中存储内容时,我认为它也会存储在硬盘上的会话文件中。对该组件进行抽象,以便在memcache/session/apc解决方案之间轻松切换。然后构建你的第一个版本——正如我从个人经验中发现的那样,构建一些非最优的东西要比陷入分析瘫痪要好得多。
    :)
    啊,是的,apc和xcache我忘在我的列表中了。但它也是一种在硬盘上存储数据的方法。也许最好是总结一下……。@RuvenJR.Maerson是的,但是不必自己处理缓存失效问题,您可以让APC为您做这件事。您需要缓存,而缓存很难。使用APC是最简单的方法显然,使用memcache当然是使用RAM进行缓存的好方法。有人知道一个比较过这些方法的站点吗?特别是对于memcache,我想知道我应该使用多少ram。这取决于您将存储多少数据到memcache。但也许你应该考虑一个更好的结构,看看设计模式。另一个解决方案是创建一个保存数据的类,并将该类交给其他类。类似于工厂模式。那么这是一种同时使用“技术”硬盘和Ram的方法?有趣。的确,我已经开始使用Redis作为关键业务web应用程序的主后端,我必须说它的性能非常好!