redis vs本地会话

tau*_*tau 21 php authentication session redis

我在PHP中使用会话来跟踪用户是否已登录.我不使用它来存储有关用户的任何其他数据; 本质上就像检查哈希表以查看用户是否已经过身份验证.

使用redis而不是本机PHP会话会有一些优势吗?

我对性能,可伸缩性和安全性感到好奇(并不真正关心代码复杂性).

Jam*_*mie 20

您希望会话保存处理程序快速.这是因为PHP会话将阻止来自同一用户的所有其他并发请求,直到第一个请求完成.

您可以在多个服务器上使用各种处理程序进行PHP会话:具有NFS,MySQL数据库,Memcache和Redis的文件.

数据库方法(使用InnoDB)是我使用File w/NFS的经验中最慢的.锁定和写入争用是主要因素.Memcache和Redis提供类似的性能,是迄今为止更好的选择,因为所有操作都在RAM中.Redis是我的选择,因为你可以启用磁盘持久性,而Memcache只是基于内存的.

如果你想要更多的细节,我会用Kohana解释用PHP的Redis Sessions.这是我们用于管理Redis密钥的仪表板:

Redis仪表板


Joe*_*dee 15

使用类似Redis的东西来存储会话是从负载平衡服务器中获得更多性能的好方法.

例如,在Amazon Web Services上,负载均衡器具有所谓的"粘性会话".这意味着当用户首次连接到您的Web应用程序时,例如登录到该应用程序时,负载均衡器将选择您的一个应用程序服务器,并且该用户将继续从该服务器提供服务,直到他们退出您的应用程序.这是因为PHP使用的会话将存储在他们首次使用的应用服务器上.

现在,如果您在单独的服务器上使用Redis,然后在每个应用服务器上配置PHP以将其存储在Redis中,您可以关闭此"粘性会话".这意味着您的任何服务器都可以访问会话,因此,每次向您的应用发出请求时,都会从不同的服务器为用户提供服务.这最终可以更有效地使用负载平衡设置.


tau*_*tau -1

我真的认为你不需要太担心会话,除非你获得大量的流量,PHP 可以很好地处理会话,如果你只存储那么少量的数据,即使有很多请求,它也应该没问题,并且关于性能应该很接近,因为 redis 不是 PHP 原生的。

对于 10k 用户,如果每个用户使用 1kb 左右的会话数据,那么会消耗 10,000kb 或 10~mb,这并不算多;PHP 足够聪明,可以使用足够好的数据结构来保存并快速写入和读取这些值。问题是会话数据太大,或者由于某种原因服务器消耗太多资源来读取会话数据,但通常是数据太大。