【问题标题】:Saving array in PHP Sessions [duplicate]在 PHP 会话中保存数组 [重复]
【发布时间】:2013-05-09 02:30:08
【问题描述】:

在 PHP 会话中保存大型数组会不会在服务器上很困难? “大”数组是指一个可能包含 500 个元素的数组,每个元素最多包含 100 个字段。

我可以让成千上万的用户每分钟多次执行此过程。

【问题讨论】:

  • 是的,会的。数组中有什么?您或许可以使用基于 JavaScript 的 localStorage 解决您的问题。
  • 我想这可能取决于您是将会话数据存储在文件中还是在数据库中......
  • 这取决于您的服务器配置。会话存储在 RAM 上,然后存储在 HDD 上,如果您经常访问它们,效率低下.. 使用 cookie 或数据库..
  • 如果每个请求都使用该数组,则反序列化它的成本可能比重新创建它要少。如果它只是有时使用,那么找到一种不同的方式来持久化它会更有意义
  • 在写入服务器上的 XML 之前,我想以某种方式将数组存储在内存中作为自动保存功能。数组是一堆保存属性(如大小、位置、颜色等)的对象。可能有成百上千个对象,每个对象都有多达 100 个左右的属性。

标签: php jquery arrays session


【解决方案1】:

首先,简要介绍一下 PHP 中的会话处理:

当您打开会话时,会创建一个包含会话 ID 的 cookie,并将其发送到客户端。然后 PHP 将使用session.save_path 中定义的路径来保存文件,使用 id 作为文件名 (reference)。

在你的情况下这意味着什么? 这意味着您将创建一个额外的瓶颈(磁盘 I/O 是大多数设置中最慢的事情之一),因为您将一直在写入/读取文件。

数据库服务器有大量代码来处理这种延迟,因此仅使用数据库中的表可能非常有益,该表将序列化数组作为字符串,由$_SESSION 中的 id 键控。

【讨论】:

  • 所以你建议写入数据库而不是会话?听起来不错,但我认为这会更加关注性能,不是吗?
  • 我的实际建议是不要一次性请求那么多数据,但在所有情况下,您都应该从不同于会话的机制中请求。数据库是最简单的,但您可能需要检查 memcached 或类似的内存缓存机制。
猜你喜欢
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 2018-12-09
  • 2012-11-25
相关资源
最近更新 更多