在PHP中存储全局数据的最佳实践?

时间:2010-03-08 14:33:11

标签: php mysql session

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

感谢您的时间

7 个答案:

答案 0 :(得分:7)

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

老实说,除非有一些严重的查询要求获取一个库,否则你有大量的流量,我只会坚持“只要用户点击library.php就执行查询”。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

由于这是数据库性能优化,我建议你看一下与您的问题完全匹配的memcached

  

memcached是[..]打算用于超速驾驶   动态Web应用程序   减轻数据库负载。

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

你关心表现;请注意:

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

使用数据库,它可以在这种情况下使用!