Heim >Datenbank >Redis >Mit welcher Methode implementiert Redis die Sitzungsfreigabe?

Mit welcher Methode implementiert Redis die Sitzungsfreigabe?

PHPz
PHPznach vorne
2023-05-30 13:28:062127Durchsuche

Einführung

Viele Projekte in Dachang werden auf mehreren Servern bereitgestellt. Wenn wir auf den Dienst zugreifen, kann es sein, dass er auf verschiedenen Servern ausgeführt wird Ich bin auf ein solches Anmeldeszenario gestoßen (wie im Bild gezeigt). Mithilfe dieser Informationen können Sie feststellen, ob der Benutzer angemeldet ist

Angenommen, diese Anmeldung erfolgt über Server 01, dann werden die Anmeldesitzungsinformationen dieses Mal im Speicher 01 gespeichert. Wenn ich sie jedoch erneut besuche, führt Server 02 den Vorgang aus, die Anmeldesitzungsinformationen befinden sich jedoch im Speicher 01 Server 02 kann es nicht erhalten, daher wird es beurteilt, dass ich nicht angemeldet bin und falsche Informationen zurückgeben ...

Mit welcher Methode implementiert Redis die Sitzungsfreigabe?Was wir erreichen wollen, ist, dass die durch die Anmeldung bei einem Server generierte Sitzung mit anderen Servern geteilt werden kann

, Wie kann man es also erreichen?

Lösung Da der Speicher dieser Server nicht gemeinsam genutzt werden kann, reicht es aus, einen gemeinsamen Speicherplatz zu haben, auf den diese Server gemeinsam zugreifen können (wie im Bild gezeigt). Das sollte mir in den Sinn kommen. Solange diese Servercluster eine Datenbank gemeinsam nutzen und die generierten Sitzungsinformationen in der Datenbank speichern, kann jeder darauf zugreifen. Es gibt relationale und nicht relationale Datenbanken (NoSql):

Relationale Datenbank: MySQL usw.

Mit welcher Methode implementiert Redis die Sitzungsfreigabe?Nicht-relationale Datenbank: Redis (K/V-Datenbank) usw.

    Tatsächlich ist es hier am besten, eine nicht-relationale Datenbank zu wählen, da Redis basiert im Speicher und verfügt über eine hohe Lese- und Schreibleistung, was für diese Art von Benutzern sehr gut geeignet ist. Häufiges Lesen von Informationen
  • kann auch über den Dateiserver implementiert werden, der hier nicht vorgestellt wird Diese Methode kann über iphash von nginx implementiert werden, die Idee unterscheidet sich jedoch von den beiden oben genannten. Das heißt, alle Anfragen für dieselbe IP werden von nginx berechnet und die Ergebnisse werden an sie gebunden Danach greift diese Anfrage auf den Server zu.

    Dabei gibt es jedoch einige Probleme. Erstens macht der Lastausgleich keinen Sinn, wenn der gebundene Server hängen bleibt oder Ihre Anfrage von anderen Diensten verteilt wird und nicht über den Nginx-Dienst läuft . Dann wird iphash auch nicht wirksam. Verwenden Sie es daher mit Vorsicht Der Code wird beim Anmelden aufgezeichnet. Sitzungsinformationen des Benutzers:
  • Anschließend werden die beiden Dienste des Projekts gleichzeitig geöffnet: localhost:8080 und localhost:8082 (kann als Projekte betrachtet werden, die auf zwei verschiedenen Servern ausgeführt werden).

Nach dem Öffnen des Dienstes können Sie das entsprechende Schnittstellendokument aufrufen:


--------------------------- -------Trennlinie-- --------------------------------------- -

Dieser Dienst ist über die folgenden zwei Schnittstellen verfügbar: (Die folgenden Tests werden im selben Dienst getestet) Mit welcher Methode implementiert Redis die Sitzungsfreigabe?

Anmeldeschnittstelle: Login-Benutzersitzungsinformationen aufzeichnen

Mit welcher Methode implementiert Redis die Sitzungsfreigabe?

Anmeldetest:

Mit welcher Methode implementiert Redis die Sitzungsfreigabe?

Get Aktuelle Benutzerinformationsschnittstelle: Durch Anmeldesitzung abrufen Aktuelle Benutzerinformationen

Mit welcher Methode implementiert Redis die Sitzungsfreigabe?

Testen Sie, um die aktuell angemeldeten Benutzerinformationen zu erhalten:

Da es sich jetzt um zwei Dienste handelt, ist es definitiv nicht möglich, die Sitzung zu teilen Wenn Sie sich am Port 8080 beim Dienst anmelden, können Sie sich nicht am Port 8082 anmelden. Der Dienst erhält die aktuellen Benutzerinformationen (ich betone noch einmal: Der obige Test kann die aktuellen Benutzerinformationen abrufen, da er im selben Dienst getestet wird. Das Dieselbe Dienstsitzung wird in ihrem eigenen Speicher gespeichert und kann natürlich von ihr selbst aufgerufen werden

Zunächst müssen Sie Redis herunterladen und das Tutorial hier online herunterladen. Ich verwende direkt den von Docker auf dem Server erstellten Redis-Container (einfach und benutzerfreundlich, sehr zu empfehlen):

#🎜🎜 #

# 🎜🎜#Mit welcher Methode implementiert Redis die Sitzungsfreigabe?Sie können es über das visuelle Tool verbinden:

Mit welcher Methode implementiert Redis die Sitzungsfreigabe?Auf diese Weise wird Redis konfiguriert. Konfigurieren Sie nun Redis im Projektcode: # 🎜🎜#

Redis-Abhängigkeit und Spring-Session-Konfigurationsabhängigkeit in das Projekt einführen (Sitzung automatisch in Redis speichern):

<!-- 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>

Konfigurieren Sie die Verbindung Redis und sitzungsbezogen in der application.yml-Datei Konfiguration:

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)

Tatsächlich gibt es nur eine Schlüsselkonfiguration: Store-Type: Redis Solange dies konfiguriert ist, wird die Sitzung im Code sein in Redis statt im eigenen Speicher gespeichert;

# 🎜🎜#Sie können es als nächstes testen:

Anmeldeschnittstelle aufrufen, Benutzersitzungsinformationen generieren und Redis anzeigen:

# 🎜🎜#

Sie können sehen, dass die Benutzeranmeldesitzung in Redis gespeichert wurde, sodass ich mich bei Port 8080 anmelde und die Anmeldesitzungsinformationen auch bei 8082 abrufen kann: # 🎜🎜 ## 🎜🎜#Login:#🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#Informationen:#🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜 🎜#Auf diese Weise wird die Sitzungsfreigabe durch Redis erreicht;

#🎜🎜 #Hinweis: Die eingeführten Redis- und Spring-Redis-Abhängigkeitsversionen müssen ähnlich sein.

Das obige ist der detaillierte Inhalt vonMit welcher Methode implementiert Redis die Sitzungsfreigabe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen