redis vs native sessions

2022-08-30 17:03:43

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

使用 redis 而不是原生 PHP 会话会有什么好处吗?

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


答案 1

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

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

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


答案 2

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

有各种各样的处理程序可用于跨多个服务器的PHP会话:文件/ NFS,MySQL数据库,Memcache和Redis。

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

用Kohana解释了PHP中的Redis Sessions,如果你想要更多细节。以下是我们用于管理 Redis 密钥的仪表板:

Redis Dashboard


推荐