【问题标题】:Best practice for storing global data in PHP?在 PHP 中存储全局数据的最佳实践?
【发布时间】:2011-01-25 00:14:51
【问题描述】:

我正在运行一个允许用户登录的网络应用程序。用户可以向他/她的“库”添加/删除内容,该库显示在名为“library.php”的页面上。我不想在每次加载“library.php”时都在数据库中查询用户库的内容,而是希望在用户登录时将其全局存储以供 PHP 使用,以便查询只运行一次。是否有这样做的最佳实践?外汇。将他们的库存储在会话中的数组中?

感谢您的宝贵时间

【问题讨论】:

  • “全局”通常表示“每个人都有一个实例”。您所追求的是每用户会话数据。

标签: php mysql session


【解决方案1】:

我认为最好将其存储在 Session 中。
用户登录后,正在创建会话,您可以使用超全局将数据保存在其中:

$_SESSION['key'] = "value";

您还可以在其中存储数组或其他所有内容,如果用户注销,可以将其清除。

【讨论】:

    【解决方案2】:

    当用户登录时,您可以生成一个 xml 文件(例如 USER_ID.xml),您可以使用 xslt 显示该文件。

    http://php.net/manual/en/book.xslt.php

    【讨论】:

      【解决方案3】:

      如果您将每个用户的库作为数组存储在 $_SESSION 中,正如您所建议的(这绝对是可能的),您必须确保用户对库所做的任何更新都会立即反映到该会话变量中。

      老实说,除非有一些非常繁重的查询正在进行以获取库,或者您有大量流量,否则我会坚持“每当用户点击 library.php 时执行查询”。

      【讨论】:

      • 另一件可能更好的事情是创建一个自己的缓存,该缓存将在用户登录时创建(类似于显示库的静态 html 站点),该缓存在特定时间段后被删除(例如 30 分钟或用户注销),如果它不存在或已完成任何 UPDATE 查询,则将刷新。
      • 正确 - 但以增加复杂性为代价。作为第一步,我会在库表中添加索引和查询缓存,以最大限度地提高查询性能。
      【解决方案4】:

      考虑数据的大小。乘以最大并发用户数。

      然后将其与服务器上可用的内存进行比较。还要考虑这是否是共享服务器;其他网站也需要资源。

      基于此,最好要么创建一个可以使用的文件(根据 Remi 的评论),要么保持默认的无状态形式并每次都读取。我怀疑每次读取数据都会产生很大的开销。

      【讨论】:

        【解决方案5】:

        每个 PHP 脚本在完成时都会死掉,因此数据不能像在 PC 应用程序中那样永久保存在 Web 应用程序中。

        一种方法可能是会话,但这取决于您要保存的数据量。根据您的示例,您正在谈论一个库,所以在我看来需要保存大量数据,在这种情况下,数据库是要走的路,是的,您每次都必须查询它。

        另一种方法是将它们保存在 php 文件中的数组中,但与每次都必须查询数据库一样,每次都必须包含这样的 php 文件。

        【讨论】:

          【解决方案6】:

          由于这是一个数据库性能优化,我建议你看看memcached,它完全符合你的问题:

          memcached [..] 旨在用于超速 通过以下方式启动动态 Web 应用程序 减轻数据库负载。

          【讨论】:

            【解决方案7】:

            您关心性能;请注意:

            • 会话可以使用数据库文件来存储数据。
            • 在这里使用数据库而不是文件,因为它的性能和能力。

            使用数据库,它就是专门为这种情况而设计的!

            【讨论】:

              猜你喜欢
              • 2019-11-27
              • 2017-03-23
              • 2015-10-16
              • 1970-01-01
              • 1970-01-01
              • 2018-03-11
              • 1970-01-01
              • 1970-01-01
              • 2013-07-05
              相关资源
              最近更新 更多