Redis 分布式缓存,是如何实现多台服务器SESSION 实时共享的

发布于 2022-09-01 22:20:06 字数 536 浏览 19 评论 0

现在提到多服务器的共享session,几乎都是回答用redis。
对于redis实现几台服务器共享session,不是很理解。
假如一个网站分别部署在A B C 3 台服务器上,他们的代码都是相同的。用户在访问的过程中是随机切换到其他服务器,使用redis来共享session,那么是这3台服务器是如何实现session 实时共享的?

个人猜想的方案

方案一:
A B C 三台服务器上每台服务器都部署session,PHP 直接连本台服务器的 127.0.0.1 的REDIS进行操作SESSION,通过本地REDIS进程他们相互的配置好了相互的共享机制?所以就实现了三台服务器SESSION实时共享

方案二:
将REDIS 另外的部署到第四台服务器D, A B C 三台服务器上的PHP配置连接的REDIS是这台D服务器。那么就实现了统一的SESSION 实时共享,这样貌似不正确。

很疑惑Redis SESSION 实时共享到底是如何实现的?
这三台服务器的PHP 都是连接到本地的127.0.0.1 6379 的REDIS 还是?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

暗地喜欢 2022-09-08 22:20:06

首先要明确session和cookie的区别。浏览器端 存的是cookie每次浏览器发请求到服务端是http 报文头是会自动加上你的cookie信息的。服务端拿着用户的cookie作为key去存储里找对应的value(session).

同一域名下的网站的cookie都是一样的。所以无论几台服务器,无路请求分配到哪一台服务器上同一用户的cookie是
不变的。也就是说cookie对应的session也是唯一的。

只要保证多台业务服务器访问同一个redis服务器(或集群)就行了。 这样就能达到你的目的。所以你的方案二是对的

埋葬我深情 2022-09-08 22:20:06

个人觉得共享session只是一种共享数据的理念,将本来需要保存到session的数据迁移到redis进行保存,当然也需要像session一样生成一个唯一的sessionID,然后传递给客户端,并保存到cookie,客户端每次请求的时候需要将改cookie一起发送过来,然后从redis中获取对应的数据。
其实说到共享session其实就是一个共享缓存而已。

当然我说的是理念,也许有工具可以直接将服务器上的真正的session直接保存到redis,但是我觉得理念就是这样的。

玉环 2022-09-08 22:20:06

既然用redis来共享session,本质上就意味着redis对你来讲只有一个实例,但是这个实例是仅仅启动了一个redis服务还是在多个服务器上部署一个redis集群跟你的应用层是无关的。

对于可靠性要求高的应用,redis肯定是部署成集群的,类似你说的方案1,但是这些redis不是孤立的,他们内部之间会有对应的通信机制已实现分片、冗余存储等,访问的时候也不需要限定redis的位置,比如你在A服务器访问B上面的redis也是可以的,B上面的redis实际数据存储又可能位于C服务器,这一切对于应用(客户端)来讲都是一个黑匣子,不需要关心。

檐上三寸雪 2022-09-08 22:20:06

php.ini里面有配置session的。配置改成redis或者memcache,其他就不用管了

生活了然无味 2022-09-08 22:20:06

既然是共享的,当然是要存储在同一个Redis里,这其中说的就是你的第二种。

用Redis共享Session,关键是Session就是部署在Redis上,就存储在Redis中,本地不再部署文件Session。

梦回旧景 2022-09-08 22:20:06

可以用session_set_save_handle自定义会话机制

半枫 2022-09-08 22:20:06

核心的一句话就是:保证服务器生成一个唯一的sessionID,那么就是要单独的部署一个保存sessionID的服务器,让这台服务器和其他3台服务器进行交互,保存sessionID的服务器就可以用Redis服务器进行部署.

北城孤痞 2022-09-08 22:20:06

其实上面两种方案都是可行的,首先第一种可以构建一个redis集群,来提高服务的稳定与性能,避免单点故障,导致session缓存数据的丢失。第二种可以在额外的机器上另开一个redis服务,为了提高服务的稳定,可以构建一个主从。cookie和session类似于你在redis上面的key-value

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文