我在PHP中使用会话来跟踪用户是否已登录。我不使用它来存储有关用户的任何其他数据;本质上就像检查哈希表以查看用户是否已经过身份验证。
使用redis而不是本机PHP会话会有一些优势吗?
我对性能,可伸缩性和安全性感到好奇(并不真正关心代码复杂性)。
答案 0 :(得分:16)
您希望会话保存处理程序快速。这是因为PHP会话将阻止来自同一用户的所有其他并发请求,直到第一个请求完成为止。
您可以在多个服务器上使用各种处理程序进行PHP会话:具有NFS,MySQL数据库,Memcache和Redis的文件。
数据库方法(使用InnoDB)是我使用File w / NFS的经验中最慢的。锁定和写入争用是主要因素。 Memcache和Redis提供类似的性能,是迄今为止更好的选择,因为所有操作都在RAM中。 Redis是我的选择,因为你可以启用磁盘持久性,而Memcache只是基于内存的。
如果您需要更多详细信息,我会解释Redis Sessions in PHP with Kohana。这是我们用于管理Redis密钥的仪表板:
答案 1 :(得分:12)
使用类似Redis的东西存储会话是从负载平衡服务器中获得更高性能的好方法。
例如,在Amazon Web Services上,负载均衡器具有所谓的“粘性会话”。这意味着当用户首次连接到您的网络应用时,例如登录时,负载均衡器将选择一个应用服务器,此用户将继续从该服务器提供服务,直到退出应用程序。这是因为PHP使用的会话将存储在他们首次使用的应用服务器上。
现在,如果您在单独的服务器上使用Redis,然后在每个应用服务器上配置PHP以将其存储在Redis中,您可以关闭此“粘性会话”。这意味着您的任何服务器都可以访问会话,因此,每次向您的应用发出请求时,都会从不同的服务器为用户提供服务。这最终可以更有效地使用负载平衡设置。
答案 2 :(得分:0)
我真的不认为你需要担心会话,除非你获得大量的流量,PHP很好地处理会话,如果你只存储那么少的数据,即使有很多请求也应该没问题,关于性能它应该是接近的,因为redis不是PHP的原生。
对于10k用户,如果每个用户使用类似1kb的会话数据,则会消耗10,000kb或10~mb,这并不多; PHP足够聪明,可以使用足够好的数据结构来保存并快速写入和读取这些值。问题是如果会话数据太大,或者由于某种原因服务器消耗了太多资源来读取会话数据,但通常情况下,如果数据太大了。