【问题标题】:Remember object state in PHP between requests在请求之间记住 PHP 中的对象状态
【发布时间】:2010-12-16 02:03:44
【问题描述】:

我正在编写一个应用程序,我将拥有许多不同语言的一些字典值。我知道我可以使用GetText,但是AFAIR文件必须在编辑后编译,我想让用户编辑字典,我不能在服务器上重新编译.mo文件。我不知道会使用多少种语言,所以解决方案必须是弹性的。

我设计了数据库,所以它工作得很好,架构看起来很好,但是对于每个字典值都有几个连接,所以解决方案不会太快。

出于这个原因,我正在考虑存储一次字典值,并仅在编辑其中的值后刷新它。不幸的是,无法使用 PHP 静态变量,因为它们在请求结束时死掉了。我不想使用会话,因为我必须为每个用户进行数据库调用。理想情况下,我想像在 Java 中一样使用静态变量 - 只要应用程序存在于 JVM 中,它们就会存在。

为所有用户(不是每个用户)长时间(不是每个请求)存储一些变量(在我的示例中 - 字典、字典条目等)的最佳解决方案是什么?

我正在考虑制作类似DictionaryValues 的类,将其序列化一次,然后在每次请求时对其进行反序列化。每次有人编辑字典时,对象将被再次序列化并替换旧的序列化对象。当然,与读取字典值的频率相比,编辑很少发生。

这是一个好的解决方案吗?我应该序列化对象并将其存储在磁盘上还是将其写入数据库?哪个更快?

也许你会为这个问题找到更好的解决方案?

【问题讨论】:

    标签: php database session internationalization static-variables


    【解决方案1】:

    你可以试试 PHP APC。它快速且易于使用。您可以序列化/反序列化对象并轻松存储/获取它们。

    在分布式环境中,您可以使用memcache 执行相同的功能。

    【讨论】:

      【解决方案2】:

      有几个选项:

      1. 您可以使用共享内存(shmopmemcache)。
      2. 您可以缓存到文件或数据库 - 尝试 PEAR::Cache_Lite(或 @jldupont 建议的 APC

      【讨论】:

        【解决方案3】:

        memcache / APC 太多或不可能时的几个选项:

        您可以经常将数据库值“编译”到 PHP 文件中并将其包含在内。这将是最快的解析和处理方式。

        如果您不需要每个页面中的每个字典值(很可能,不是吗?),您可能希望使用无需 JOIN 即可工作的缓存表。从足迹的角度来看,这将是最好的解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-19
          • 1970-01-01
          • 1970-01-01
          • 2019-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-28
          相关资源
          最近更新 更多