是否建议将 PHP 会话存储在 MemCache 中?

2022-08-30 09:35:56

我正在使用负载平衡器后面的几个Web服务器,我可以启用粘滞会话以将用户保留到一个特定的Web服务器 - 这将起作用。

我一直在阅读有关PHP Sessions和MemCache的信息。我必须说我读到的内容有点令人困惑,因为有些页面说这是一个好主意,而另一些页面则相反。

问题:

  1. 是否可以将php会话保留在memcache中?
  2. 使用粘性会话而不是记忆缓存更好吗?
  3. memcache中的php会话有什么问题 - 注意:我可以获得足够的缓存(亚马逊所以它的可扩展性)。

答案 1

1:是的。我强烈建议将PHP会话存储在Memcached中。原因如下:

Memcached非常适合存储数据库和文件系统经常访问的小块数据。

Memcached是专门为会议设计的。它最初是 livejournal.com 首席开发人员的心血结晶,后来也用于缓存用户帖子的内容。好处是立竿见影的:大部分行动都是在记忆中发生的。页面加载时间大大缩短。

值得庆幸的是,PHP和Apache有一个简单的实现来处理Memcached的会话。只需使用几个 shell 命令进行安装

Debian 的例子:

sudo apt-get -t stable install php7.4-memcached

将 php.ini 设置更改为类似于以下内容的内容:

(摘自 https://www.php.net/manual/en/memcached.sessions.php)

 session.save_handler = memcached
 ; change server:port to fit your needs...
 session.save_path = "localhost:11211"

关键是session.save_path

它将不再指向服务器上的相对文件路径。提到了APC - 用于缓存程序使用的.php文件的APC。APC和Memcached将显着减少IO,并使Apache / Nginx能够更快地自由地使用服务器资源,例如图像。

2:

3:使用Memcached的根本缺点是数据波动

会话数据在 Memcached 中不是持久的。因此,如果服务器崩溃,内存中的所有数据都将丢失。每个人都必须重新登录。

然后你有内存消耗...

请记住:会话存储在内存中。如果您的网站处理大量并发用户,您可能需要支付一些额外的钱来分配更大的内存。


答案 2

1. 是的,可以将 PHP 会话保留在 memcached 中。

memcache扩展甚至带有一个会话处理程序,只需很少的配置即可启动和运行。http://php.net/manual/en/memcached.sessions.php

2. 记忆/粘性会话

我真的不知道哪个“更好”。我觉得这将是“视情况而定”的答案之一。这可能取决于您进行负载平衡的原因。如果少数用户导致每个用户的大量负载,或者如果是一个大数字导致每个用户的小负载。

3. 记忆的缺点

使用memcache进行会话存储可能有2个主要缺点。

首先,它是不稳定的。这意味着,如果您的某个 memcached 实例重新启动/崩溃等,则存储在该实例中的任何会话都将丢失。虽然如果他们使用传统的基于文件的会话,当服务器返回时,他们仍将在那里。

其次,可能更相关的是,memcached并不能保证持久性,它只是一个缓存。可以随时出于任何原因从 memcached 中清除数据。而实际上,应该清除数据的唯一原因是缓存是否接近其大小限制。最近访问最少的数据将被驱逐。同样,这可能不是问题,因为如果用户的会话过时,用户可能已经离开了,但这取决于您的需求。


推荐