使用具有高流量的$ _Session变量

时间:2011-08-05 16:46:52

标签: php

我正在为一家公司进行快速调查,该公司每小时将获得约20万(高峰期)访客,连续约2天。我只是想知道使用$ _SESSION变量是否会占用服务器。我们存储在这些变量中的所有内容最多为6个字符的字符串或单个数字的整数。我是PHP世界的新手,所以我不确定$ _Session变量有多可靠或多少会占用服务器。我们使用的服务器将是云服务器。 最后一点需要注意的是,在我关闭之前,每个访问者的会话最多只能持续6到10分钟。

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:1)

默认情况下,$ _SESSION中的数据将在每次调用session_write_close()时或脚本终止时写入磁盘。如果不测试您将使用的服务器硬件上的最终应用程序,就无法确定这将如何执行。由于数据量很小,真正的担心是磁盘延迟。一个简单的解决方法是将PHP的session_save_path设置为内存中的文件系统。

答案 1 :(得分:0)

怎么样?磁盘空间?使用默认的基于文件的会话处理程序存储一个简单的6char字符串将占用磁盘上大约6 +长度的变量名+6个字符的空间。在会话文件中加载/反序列化数据会有一些开销。但它将远远低于加载/编译使用会话数据的脚本的初始开销。

请记住,PHP的默认会话使用磁盘作为其存储介质 - 在脚本退出后,它们不会保留在内存中。

答案 2 :(得分:0)

在PHP中,您可以更改会话处理程序。默认会话处理程序是在临时文件中写入数据,每个会话只有一个文件。它工作正常,但在运行高流量应用程序时有局限性(虽然每小时200K,你的默认处理程序没有问题)。

简单的解决方案是使用Memcached的会话处理程序,使用PECL / Memcache扩展(不要与PECL / Memcached扩展混淆):

http://www.php.net/manual/en/memcache.examples-overview.php(参见示例#2)

答案 3 :(得分:0)

我认为您不希望在会话中存储数据,因为它会写入磁盘。如果有人通过多个请求点击应用程序,您是否能够保证他们在云端访问同一台计算机?这写起来相当复杂。我会改为对用户进行cookie。

http://php.about.com/od/learnphp/qt/session_cookie.htm

http://www.quora.com/Does-PHP-handle-sessions-by-writing-session-variable-data-to-disc-or-does-this-information-persist-only-in-RAM-Will-accessing-session-data-cause-a-disc-read-in-PHP

与其他人说的一样,如果你想扩展我会使用Memcached,但是为了直接回答你的问题,我认为你的服务器应该能够处理你描述的用法。