Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在$\u会话中保存大量信息可以吗?_Php_Mysql_Session_Memcached - Fatal编程技术网

Php 在$\u会话中保存大量信息可以吗?

Php 在$\u会话中保存大量信息可以吗?,php,mysql,session,memcached,Php,Mysql,Session,Memcached,我需要在$\u SESSION中存储许多数组,以防止从MySQL检索信息。可以吗?在$\u会话中有多少“太多”信息或没有任何“太多”信息?谢谢 或者最好使用?$\u会话不是用于缓存的 如果您需要缓存内容,请使用,或甚至。看看这个 会话中的数据量将对性能产生影响。如果您打算在会话中使用文件,请注意php可能会在磁盘上遇到瓶颈。读取、写入和序列化这些数据可能会导致严重的磁盘i/o,这是不好的 至于硬上限,我怀疑这些限制与文件系统相同。例如,如果您将大量数据保存到会话中,并且磁盘已满,则无法写入其他会

我需要在
$\u SESSION
中存储许多数组,以防止从MySQL检索信息。可以吗?在
$\u会话中有多少“太多”信息
或没有任何“太多”信息?谢谢


或者最好使用?

$\u会话不是用于缓存的

如果您需要缓存内容,请使用,或甚至。

看看这个
会话中的数据量将对性能产生影响。如果您打算在会话中使用文件,请注意php可能会在磁盘上遇到瓶颈。读取、写入和序列化这些数据可能会导致严重的磁盘i/o,这是不好的

至于硬上限,我怀疑这些限制与文件系统相同。例如,如果您将大量数据保存到会话中,并且磁盘已满,则无法写入其他会话


使用memcached将缓解磁盘i/o性能问题,因为从memcached进行写入和读取要快得多。根据memcached规范,每个会话的限制将为1MB。会话的总空间将是您启动的memcache实例的大小(由启动memcache实例时的-m标志决定)。

您询问的很多问题取决于您预期的用户数和您使用的硬件类型。假设您的PHP配置使用文件存储来存储会话信息(默认设置),并且您有足够的tmp空间,那么会话中可以存储相当大的数据块

就我个人而言,我在会话中存储了十几个左右的数据对象(通常是与用户相关的数据库结果)。该网站位于一家公司的内部网上,每小时服务约一万个请求。速度快,负载低。如果我不得不猜测每个会话都接近100KB

我不建议在一个会话中存储超过一两兆字节的数据。您还需要确保PHP和Apache(IIS,无论什么)也在清理自己。如果存储大量会话数据,临时空间将很快填满

如果你真的想让这样的东西燃烧的很快,并有现金,去买一个SSD磁盘驱动器。这将使检索速度更快


希望这能有所帮助。

会话存储层限制了会话中存储的数据量。默认会话存储是文件系统,一个会话存储在一个文件中。会话变量/数组键的名称及其数据存储在会话中。管道符号将变量名称和值彼此分开

如果您使用字符串存储数组,那么文件的大小将类似于字符串长度加上键的长度和元数据的一点开销以及变量名的大小

文件的大小受文件系统的限制。例如,在EXT3中,每个文件的容量为16GB。所以这是一个“太多”。在会话中存储的数据不能超过存储层允许的数量

我能想到的下一个极限是你的记忆力。因为PHP需要将数据从文件加载到内存中,并在请求结束时将其从内存存储到文件中。因此,如果您有一个会话,那么这实际上也会限制会话的大小。例如,PHP5.2中有一个16MB的标准内存限制,但这可能会因安装而异

顺便说一句,将整个内存用于会话没有多大意义

除了这些硬限制之外,可能还有性能限制,这些限制与聚合请求的数量、硬盘的速度等有关

由于你的问题很短,我想你到目前为止没有遇到任何具体问题,所以我认为这超出了范围。例如,如果你真的不需要,那么使用memcached只会增加开销。以及讨论总体上无法回答的设计决策(从不在会话中缓存)

每个会话的100或200 KB(在系统上找到会话目录并实际查看文件的大小)不应中断程序。正如建议的那样,您应该注意不再需要的旧会话文件在一定时间后会自动删除


要了解有关PHP会话配置的更多信息,请参阅。

使用“多”数组意味着什么?1、10100、1k或100k?@Charliepiga:我猜最多100个。“Memcache模块还提供了一个会话处理程序(Memcache)。”-PHP手册。只是说…这个答案并不能解释为什么,这就是问题所要问的。@tandu因为你应该缓存那些必须对多个用户可用的东西。会话没有提供这一点。如果你必须为每个用户存储100多个阵列,那么问题就出在应用程序设计上,“在$\u会话中保存内容”只是一种廉价且不可持续的黑客行为。我不知道为什么这个答案在完全脱离主题的情况下得到这么多分数。他要求存储数据,memcache和session都可以做到这一点。真正的答案是:哪一个?您只是用一个明显的说法来回答。@teresko这里的缓存定义可能有出入。如果您在一个会话中存储100多个数组,那么就没有那么多了,特别是与在每次页面加载时从数据库中检索这些100多个数组相比(否则您必须这样做)。APC、memcached等是否为用户本地存储此信息提供了优越的机制@Charliepiga似乎说memcached有这样一个模块。小心SSD,Jeff Atwood(@CodingHorror)有一篇关于SSD和故障率的博文。。。同意。它们只有这么多的写入周期。我不建议使用SSD作为设备的主驱动器(除非该设备是一次性的),并且始终保留存储在驱动器上的任何您无法忍受的东西的备份(当然,这是一个很好的做法)。