我需要在$_SESSION
中存储许多数组,以防止从MySQL中检索信息。好吗? $_SESSION
中的“太多”信息是多少,或者没有“太多”?感谢。
P.S。或者最好使用http://php.net/manual/en/book.memcache.php?
答案 0 :(得分:3)
您要问的很多内容取决于您期望的用户数量以及您使用的硬件类型。假设您的PHP配置使用文件存储来获取会话信息(默认值),并且您有足够的tmp空间,则可以在会话中存储相当大的数据块。
我个人在会话中存储了十几个数据对象(通常是与用户有关的数据库结果)。该网站位于公司内联网上,每小时提供大约一万个请求。它很快,负载很低。如果我不得不猜测每个会话接近100KB。
我不建议在会话中存储超过一兆字节或两兆字节。您还需要确保PHP和Apache(IIS,无论如何)自己也在清理。如果你存储了很多会话数据,临时空间会很快填满。
如果你真的想要快速制作这样的东西,并拥有现金,那就选择SSD磁盘驱动器吧。这将使检索更快。
希望这有帮助。
答案 1 :(得分:3)
您可以在会话中存储的数据限制受会话存储层的限制。默认会话存储是文件系统,一个会话存储在一个文件中。会话变量/ array-key的名称及其数据存储在serialized form中。管道符号将变量名称和值彼此分开。
如果您使用字符串存储数组,那么该文件的大小将类似于字符串的长度加上键的长度以及元数据的一点开销以及变量名的大小。
文件大小受文件系统的限制。例如,在EXT3中,每个文件为16 GB。所以这是一个“太多”。您无法在会话中存储比存储层允许的更多数据。
我能想到的下一个限制就是你的记忆。因为PHP需要将文件中的数据加载到内存中,并在请求结束时将内存中的数据存储到文件中。因此,如果您有一个memory limit in PHP,那么这实际上会限制您的会话大小。例如,PHP 5.2中的标准内存限制为16MB,但这可能因您的安装而异。
顺便使用整个内存进行会话没有多大意义。
除了这些硬限制之外,可能存在性能限制,这些限制与同等请求的数量,硬盘的速度等有关。
由于你的问题非常简短,我认为你到目前为止没有遇到任何具体的问题,所以我认为这将超出范围。例如。如果你真的不需要使用memcached将只是开销。除了讨论设计决策(从不在会话中缓存)之外根本无法回答。
每个会话100或200千字节(找到系统上的会话目录并实际查看文件的大小)不应该破坏您的程序。根据建议,您应该注意不再需要的旧会话文件会在一段时间后自动删除。
要了解有关PHP中会话配置的更多信息,请参阅Session Runtime Configuration in the PHP Manual。
答案 2 :(得分:2)
答案 3 :(得分:1)
答案 4 :(得分:1)
会话中的数据量会对性能产生影响。如果您打算使用文件进行会话,请注意php可能会在磁盘上遇到瓶颈。读取,写入和序列化这些数据可能会导致重磁盘i / o,这很糟糕。
就硬上限而言,我怀疑这些限制与您的文件系统相同。例如,如果您将大量数据保存到会话中,并且填满了磁盘,则无法编写其他会话。
使用memcached将缓解磁盘I / O性能问题,因为从memcached写入和读取速度要快得多。根据memcached规范,每个会话的限制为1MB。会话的总空间将是您启动的memcache实例的大小(在启动memcache实例时由-m标志指示)。