现在提到多服务器的共享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 还是?
Tout d’abord, nous devons clarifier la différence entre session et cookie. Le côté navigateur stocke les cookies. Chaque fois que le navigateur envoie une requête au serveur, l'en-tête HTTP ajoutera automatiquement vos informations sur les cookies. Le serveur utilise le cookie de l'utilisateur comme clé pour trouver la valeur (session) correspondante dans le stockage
.Les sites Web sous le même nom de domaine ont tous les mêmes cookies. Par conséquent, quel que soit le nombre de serveurs, le cookie du même utilisateur sur lequel le serveur où la requête sans route est distribuée est
inchangé. Autrement dit, la session correspondant au cookie est également unique.
Assurez-vous simplement que plusieurs serveurs d'entreprise accèdent au même serveur Redis (ou cluster). Cela permettra d'atteindre votre objectif. Donc ton plan 2 est bon
Puisqu'il est partagé, il doit bien sûr être stocké dans le même Redis, ce qui est votre deuxième option.
Utilisez Redis pour partager la session. La clé est que la session est déployée sur Redis et stockée dans Redis. Le fichier Session n'est plus déployé localement.
Puisque vous utilisez Redis pour partager des sessions, cela signifie essentiellement qu'il n'y a qu'une seule instance de Redis pour vous, mais le fait que cette instance démarre uniquement un service Redis ou déploie un cluster Redis sur plusieurs serveurs dépend de votre couche d'application.
Pour les applications ayant des exigences de fiabilité élevées, les redis doivent être déployés dans des clusters, similaires à la solution 1 que vous avez mentionnée, mais ces redis ne sont pas isolés. Il y aura des mécanismes de communication correspondants en leur sein pour réaliser le partitionnement et la redondance. , il n'est pas nécessaire de limiter l'emplacement de redis lors de l'accès. Par exemple, vous pouvez accéder à redis sur B sur le serveur A, et le stockage réel des données de redis sur B peut être situé sur le serveur C. Tout cela est très important pour. l'application (client). C'est une boîte noire, pas besoin de s'en soucier.
Il y a une configuration de session dans php.ini. Changez la configuration en redis ou memcache, et ne vous souciez de rien d'autre
Personnellement, je pense que le partage de sessions n'est qu'un concept de partage de données. Les données qui doivent initialement être enregistrées dans la session sont migrées vers Redis pour le stockage. Bien sûr, il est également nécessaire de générer un identifiant de session unique comme le. session, puis le transmettre au client et l'enregistrer dans Cookie, le client doit envoyer le cookie modifié ensemble à chaque fois qu'il fait une demande, puis obtenir les données correspondantes de redis.
En fait, lorsqu'il s'agit de session partagée, il ne s'agit en fait que d'un cache partagé.
Bien sûr, je parle du concept. Il existe peut-être des outils qui peuvent directement enregistrer la vraie session sur le serveur sur Redis, mais je pense que le concept est comme ça.
En fait, les deux solutions ci-dessus sont réalisables. Tout d'abord, la première peut créer un cluster Redis pour améliorer la stabilité et les performances du service et éviter les points de défaillance uniques, qui peuvent entraîner la perte de session. données en cache. La deuxième option consiste à ouvrir un service Redis sur une machine supplémentaire. Afin d'améliorer la stabilité du service, vous pouvez créer un service maître-esclave. Les cookies et les sessions sont similaires à votre valeur-clé sur Redis