Table des matières
Introduction
#🎜. 🎜#
Maison base de données Redis Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

May 30, 2023 pm 01:28 PM
redis session

Introduction

De nombreux projets à Dachang sont déployés sur plusieurs serveurs. Lorsque nous accédons au service, bien que le même service soit exécuté, il peut s'exécuter sur différents serveurs. ;

J'ai rencontré un tel scénario de connexion lorsque j'étudiais le projet. Supposons qu'il y ait trois serveurs comme suit (comme indiqué sur l'image) et utilisez la session pour stocker les informations de connexion de l'utilisateur. être utilisé pour déterminer si l'utilisateur est connecté :

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

En supposant que cette connexion est effectuée via le serveur 01, alors les informations de session de connexion cette fois sont stockées dans la mémoire 01 ; mais lorsque je visite à nouveau, le serveur 02 effectue l'opération, mais les informations de session de connexion sont dans la mémoire 01 et le serveur 02 ne peut pas les obtenir, il jugera donc que je ne suis pas connecté et renverra les mauvaises informations. .

Ce que nous voulons réaliser, c'est que la session générée en se connectant à un serveur puisse être partagée avec d'autres serveurs , alors comment y parvenir ?

Solution L'idée est que puisque la mémoire de ces serveurs ne peut pas être partagée, tant qu'il existe un espace partagé auquel ces serveurs peuvent accéder ensemble (comme Picture );

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

La première chose qui me vient à l'esprit devrait être la base de données tant que ces clusters de serveurs partagent une base de données et stockent les informations de session générées dans. la base de données, ça ne suffira pas. Bon, donc tout le monde peut y accéder ; la base de données a du relationnel et du non relationnel (NoSql) :

  • Base de données relationnelle : Mysql etc.

    #🎜🎜 #
  • Base de données non relationnelle : Redis (base de données K/V), etc.

In en fait, il est préférable de choisir ici une base de données non relationnelle, car Redis Basé sur la mémoire, il a des performances de lecture et d'écriture élevées, ce qui est très approprié pour cette situation où les informations utilisateur sont fréquemment lues

 ; peut également être implémenté via le serveur de fichiers, qui ne sera pas présenté ici ; Il existe une méthode qui peut être implémentée via l'iphash de nginx. Cette méthode est très simple, mais l'idée est différente des deux ci-dessus. pour la même IP sera calculé par nginx iphash, et les résultats seront liés au serveur spécifié. Après cela, toutes les demandes seront envoyées à ce serveur.

Mais cela pose quelques problèmes. Tout d'abord, l'équilibrage de charge n'a pas beaucoup de sens si le serveur lié raccroche, alors iphash sera invalide ou votre requête sera distribuée par d'autres services sans passer par nginx ; ., alors iphash ne prendra pas non plus effet ; utilisez-le donc avec prudence

Ci-dessous, je vais simplement simuler via le code comment réaliser facilement le partage de session via la configuration Redis ; introduction

Il y a un projet de gestion des utilisateurs ici. Lors de la connexion, le code logique de connexion enregistrera les informations de session de l'utilisateur connecté :

#🎜. 🎜#

puis ouvrez-le en même temps Les deux services de ce projet : localhost:8080 et localhost:8082 (peuvent être considérés comme des projets fonctionnant sur deux serveurs différents)

#🎜 🎜#

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?Après ouverture du service Vous pouvez accéder au document d'interface correspondant :

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?-------- --------------- ------------Ligne de séparation-------------------------- --------------- -------

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?Le service dispose des deux interfaces suivantes : (Les tests suivants sont testés dans le même service)#🎜 🎜#

Interface de connexion : enregistrer les informations de session utilisateur de connexion

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

Test de connexion :

# 🎜🎜#

Obtenir l'interface des informations utilisateur actuelles : Obtenez les informations actuelles de l'utilisateur en vous connectant à la session

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

Obtenez le test des informations de connexion actuelles de l'utilisateur : #🎜🎜 #

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

Parce qu'il s'agit de deux services maintenant, il n'est certainement pas possible de partager la session. Même si vous vous connectez au service sur le port 8080, vous ne pouvez pas l'obtenir sur le service sur le port 8082. aux informations utilisateur actuelles (j'insiste encore : le test ci-dessus peut obtenir les informations utilisateur actuelles car il est testé ; dans le même service. La même session de service est stockée dans sa propre mémoire et est bien sûr accessible par elle-même)

#🎜 🎜#Opération spécifique

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?Ce qui suit est de mettre en œuvre une session partagée via Configuration Redis :

Téléchargez d'abord redis et téléchargez les tutoriels en ligne ; ici j'utilise directement le conteneur redis créé via docker sur le serveur (simple et facile à utiliser, fortement recommandé) :

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

Vous pouvez le connecter via l'outil de visualisation :

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

De cette façon, redis est configuré. Configurez maintenant redis dans le code du projet :

Introduisez la dépendance redis et la dépendance de configuration spring-session dans le projet (stockez automatiquement la session dans redis) :

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
	<version>2.6.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session-data-redis</artifactId>
	<version>2.6.3</version>
</dependency>
Copier après la connexion

Configurez dans le fichier application.yml. file Configurations associées pour connecter redis et session :

spring:
  # session配置
  session:
    timeout: 86400 # 设置session失效时间
    store-type: redis # 修改spring-session存储配置,默认存储到服务器内存中,现在设置存到redis中(关键)
  # redis配置
  redis:
    port: 8081 # redis的端口号(这里是我的redis容器在docker中对应的端口号)
    host: xx.xxx.xxx.xxx # 我的云服务器ip
    database: 0 # 设置存入redis的哪一个库(默认是0)
Copier après la connexion

En fait, il n'y a qu'une seule configuration clé : store-type : redis Tant que celle-ci est configurée, la session dans le code sera stockée dans redis au lieu de sa propre mémoire.

Ensuite, vous pouvez Testé :

Appelez l'interface de connexion, générez les informations de session utilisateur, vérifiez redis :

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

Vous pouvez voir que la session de connexion utilisateur a été stockée dans redis, je peux donc me connecter sur le port 8080. , et je peux également obtenir les informations de connexion sur 8082 Informations de session :

Connexion :

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

Obtenir des informations :

Quelle est la méthode utilisée par Redis pour implémenter le partage de session ?

De cette façon, le partage de session se fait via redis

Remarque : l'introduction de redis ; et les versions de dépendance spring-redis doivent être proches.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution à l'erreur 0x80242008 lors de l'installation de Windows 11 10.0.22000.100 Solution à l'erreur 0x80242008 lors de l'installation de Windows 11 10.0.22000.100 May 08, 2024 pm 03:50 PM

Solution à l'erreur 0x80242008 lors de l'installation de Windows 11 10.0.22000.100

Comment changer le mot de passe dans Redis Comment changer le mot de passe dans Redis Apr 20, 2024 am 03:00 AM

Comment changer le mot de passe dans Redis

Analyser les goulots d'étranglement des fonctions PHP et améliorer l'efficacité de l'exécution Analyser les goulots d'étranglement des fonctions PHP et améliorer l'efficacité de l'exécution Apr 23, 2024 pm 03:42 PM

Analyser les goulots d'étranglement des fonctions PHP et améliorer l'efficacité de l'exécution

Redis est-il un cache mémoire ? Redis est-il un cache mémoire ? Apr 20, 2024 am 05:26 AM

Redis est-il un cache mémoire ?

Stratégie de mise en cache et optimisation de l'API Golang Stratégie de mise en cache et optimisation de l'API Golang May 07, 2024 pm 02:12 PM

Stratégie de mise en cache et optimisation de l'API Golang

Redis est-il une base de données non relationnelle ? Redis est-il une base de données non relationnelle ? Apr 20, 2024 am 05:36 AM

Redis est-il une base de données non relationnelle ?

Mécanisme de mise en cache et pratique d'application dans le développement PHP Mécanisme de mise en cache et pratique d'application dans le développement PHP May 09, 2024 pm 01:30 PM

Mécanisme de mise en cache et pratique d'application dans le développement PHP

Lequel a les meilleures performances, erlang ou golang ? Lequel a les meilleures performances, erlang ou golang ? Apr 21, 2024 am 03:24 AM

Lequel a les meilleures performances, erlang ou golang ?

See all articles