我一直在阅读这个主题一段时间。突然有一天,这个解决方案是必要的,而不仅仅是一个梦想。
通过阅读,我看到了流行的差异(基于文件、memcached、共享内存 (mm)、sql 表和自定义)。
我们最初的想法是使用安装在每个应用程序服务器(LAMP 盒)上的 ZFS 或 AFS,并将session.save_path
php.ini 设置指向该安装路径中的目录。
我想听听成功的故事。
我一直在阅读这个主题一段时间。突然有一天,这个解决方案是必要的,而不仅仅是一个梦想。
通过阅读,我看到了流行的差异(基于文件、memcached、共享内存 (mm)、sql 表和自定义)。
我们最初的想法是使用安装在每个应用程序服务器(LAMP 盒)上的 ZFS 或 AFS,并将session.save_path
php.ini 设置指向该安装路径中的目录。
我想听听成功的故事。
约翰坎贝尔在这里的回答应该会有所帮助
他关于不只使用 Memcached 的观点很重要。
此外,正如我在那个问题中提到的,您可能需要考虑 Zend 平台附带的会话集群 - 但该解决方案存在大量许可成本。
我认为将您的会话存储在数据库(如 MySQL 或 PostgreSQL)中将涉及最少的麻烦,特别是如果您已经拥有一个数据库,无论您的应用程序做什么。
Memcached 也可能有所帮助,因为它可以跨多台机器存储数据,但我没有任何经验。
我已经使用基于共享服务器上的会话的文件超过 5 年了,没有任何问题。我们有一些会话可能会变得非常大(>10MB)并且基于文件的工作非常好。通常,我们的共享服务器将每个站点的会话文件存储在 chroot 目录中,因此只有 root 可以访问它们。我们发现这是非常可靠的并且没有任何问题。尽管您失去了数据库或 memcached 的一些功能,但它是 PHP 的默认设置是有原因的。
我有点偏见,但我推荐HTTP_Session2。(我正在研究这个包)虽然我们通过文件支持传统的会话处理,但我们还支持数据库(通过PEAR::MDB2支持数据库(MySQL、PostgreSQL、SQlite 等)和 memcached。
就个人而言,我们使用数据库处理程序,每天为多达 100,000 个用户提供服务,没有更大的问题。我认为在优化方面,我接下来会使用 memcached,但是数据库非常适合不需要您向后弯曲的中间修复。:-)
顺便说一句,有关 memcached 的更多信息,请查看我关于如何在 Web 集群中管理会话变量的答案?.
编辑
既然你问了,这里有一个例子(更多在 API 文档中):
$options = array('memcache' => $memcache);
PECL::Memcache$memcache
的实例在哪里,这是必需的。我知道我们缺少一个例子,我们会改进的。同时,我们的源代码有很好的内联文档,例如查看API 文档。
如果您正在研究用于会话的 Memcached 解决方案 - 也许您应该查看Repcached。如果服务器重新启动等,应该减少丢失会话的任何问题。
关于 repcached
“repcached”是一个补丁集,它为 memcached 1.2.x 添加了数据复制功能。
注意:我实际上还没有尝试过 repcached,但认为它值得研究。