Inhaltsverzeichnis
1. Konfiguration und Entwicklung
Der Client meldet sich beim Redis-Server an und zeigt den Sitzungsinhalt in Redis an.
Heim Java javaLernprogramm Wie SpringBoot Spring Session integriert, um verteilte Sitzungen zu implementieren

Wie SpringBoot Spring Session integriert, um verteilte Sitzungen zu implementieren

May 13, 2023 pm 01:52 PM
springboot spring session

Spring bietet eine Lösung für die Handhabung verteilter Sitzungen: Spring-Session. Spring-Session bietet Unterstützung für gängige Speicher wie Redis, MongoDB, MySQL usw. Spring-Session bietet eine transparente Integration mit HttpSession, was bedeutet, dass Entwickler die von Spring-Session unterstützte Implementierung verwenden können, um HttpSession auf Spring-Session umzustellen.

1. Konfiguration und Entwicklung

Schritt 1. Abhängigkeiten hinzufügen

Fügen Sie die Abhängigkeitspakete von Redis und Spring-Session in der pom.xml-Datei des Projekts hinzu.

        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
Nach dem Login kopieren

Schritt 2. Konfigurieren Sie die Redis- und Spring-Session-Persistenzmethoden

Der Autor ist es gewohnt, application.properties als SpringBoot-Konfigurationsdatei zu verwenden, und Sie können sie auch mit application.yml konfigurieren. Fügen Sie die folgende Konfiguration in der Konfigurationsdatei application.properties hinzu.

# 配置 Redis 服务器地址(此处是一个虚假地址)
spring.redis.host=10.211.12.6
# 配置 Redis 端口
spring.redis.port=6379
# 配置 Redis 密码
spring.redis.password=123456
# 其他 Redis 的配置还有很多,例如 Redis 连接池的配置,此处暂时只配置上述几项关键点
# spring session 配置
spring.session.store-type=redis
Nach dem Login kopieren

Schritt 3. Verwenden Sie den JSON-Serialisierungsmechanismus

Spring-Session verwendet standardmäßig den JDK-Serialisierungsmechanismus, der Klassen zur Implementierung der serialisierbaren Schnittstelle erfordert. Nach der Serialisierung handelt es sich um ein binäres Byte-Array, das schwer zu verstehen ist. Mithilfe des JSON-Serialisierungsmechanismus ist die serialisierte Zeichenfolge leicht zu verstehen.

package com.test.conf;

import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.RedisSerializer;

// spring session 使用 json 序列化机制
@Configuration
public class SessionConfig {
    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
        return new GenericFastJsonRedisSerializer();
    }
}
Nach dem Login kopieren

Schritt 4. Fügen Sie die Annotation @EnableRedisHttpSession zur SpringBoot-Startklasse hinzu, um Spring-Session zu öffnen.

package com.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

@SpringBootApplication
// 开启 Spring-Session
@EnableRedisHttpSession
// @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800, redisNamespace = "test:session")
public class TestSessionAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestSessionAppApplication.class, args);
    }
}
Nach dem Login kopieren

Fügen Sie die Annotation @EnableRedisHttpSession hinzu, um Spring-Session zu öffnen. Die Annotation verfügt über mehrere Parameter, die individuell festgelegt werden können, darunter maxInactiveIntervalInSeconds für die Ablaufzeit der Sitzung. Der Standardwert beträgt 30 Minuten. redisNamespace stellt den Namespace dar, wenn die Sitzung in Redis gespeichert wird, dh das Schlüsselnamenpräfix der gespeicherten Sitzung In Redis ist der Standardwert „spring:session“. In tatsächlichen Projekten können verschiedene Systeme dasselbe Redis verwenden, um Ressourcen zu sparen. Um die Sitzungen verschiedener Systeme zu unterscheiden, kann für jedes System ein separater Namespace festgelegt werden. 2. Testen Öffnen Sie mit Google Chrome den Link http://localhost:9001/testSession. Der Server druckt das Protokoll wie unten gezeigt.

    @RequestMapping(value = "testSession")
    public String testSession(HttpServletRequest request) {
        HttpSession session = request.getSession();
        log.info("sessionId:[{}]", session.getId());
        session.setAttribute("name", "Lucy");
        session.setAttribute("age", "20");
        return session.getAttribute("name").toString();
    }
Nach dem Login kopieren

Der Client meldet sich beim Redis-Server an und zeigt den Sitzungsinhalt in Redis an.

sessionId:[5c417104-4f6d-430d-b569-cbc1e19cdf02]
Nach dem Login kopieren

Redis speichert drei Schlüsselwertpaare (im Folgenden als Schlüsselwert bezeichnet) für jede RedisSession:

Der erste Schlüsselwert speichert die ID dieser Sitzung, bei der es sich um eine Redis-Datenstruktur vom Typ Set handelt. Der letzte Wert 1658127780000 in diesem Schlüssel ist ein Zeitstempel, der auf der Grundlage des Sitzungsablaufzeitpunkts berechnet wird, der auf die nächste Minute übertragen wird.

Der zweite Schlüsselwert wird zum Speichern der detaillierten Informationen der Sitzung verwendet. Es handelt sich um eine Redis-Datenstruktur vom Hash-Typ, einschließlich der letzten Zugriffszeit der Sitzung (lastAccessedTime) und des Ablaufzeitintervalls (maxInactiveInterval, die Standardeinstellung). beträgt 30 Minuten, der hier gespeicherte Sekundenwert), die Erstellungszeit (creationTime), sessionAttr usw.

  • Der dritte Schlüsselwert wird verwendet, um die Ablaufzeit der Sitzung in Redis darzustellen, und ist eine Redis-Datenstruktur vom Typ String. Dieser Schlüsselwert speichert keine nützlichen Daten, er dient lediglich zur Anzeige des Sitzungsablaufs. Die Ablaufzeit dieses Schlüssels in Redis ist das Ablaufzeitintervall der Sitzung. Mit dem Befehl ttl können Sie die Ablaufzeit des Schlüssels anzeigen, also die Ablaufzeit der Sitzung.

  • Während dieses Tests sind die Datendetails in Redis wie folgt.

    [testuser@vm ~]$ redis-cli -h 10.211.12.6 -p 6379
    10.211.12.6:6379> auth 123456
    OK
    10.211.12.6:6379> keys *
    1) "spring:session:expirations:1658127780000"
    2) "spring:session:sessions:5c417104-4f6d-430d-b569-cbc1e19cdf02"
    3) "spring:session:sessions:expires:5c417104-4f6d-430d-b569-cbc1e19cdf02"
    Nach dem Login kopieren
    Überprüfen Sie das Browser-Cookie. Zu diesem Zeitpunkt verwendet der Browser bereits ein Cookie, wie im Bild unten gezeigt.
  • Aktualisieren Sie den Browser, die im Backend gedruckte SessionId bleibt unverändert, der Sitzungsinhalt in Redis wird nicht hinzugefügt und der Browser gibt den Inhalt normal zurück. Dies bedeutet, dass der Sitzungsbetrieb dieses Knotens normal ist.

    Öffnen Sie mit demselben Browser einen weiteren Testport-Link http://localhost:9002/testSession. Der Backend-Druckinhalt ist derselbe (die Ablaufzeit wurde aktualisiert). , was darauf hinweist, dass es sich bei den Clusterknoten um eine gemeinsame Sitzung handelt.

    3. Nachteile von Spring-Session

    SpringBoot怎么整合Spring Session实现分布式会话Obwohl Spring-Session eine benutzerfreundliche, nahezu transparente Integrationsmethode bietet, die die Unterstützung von Cluster-Sitzungen trivial macht, weist Spring-Session tatsächlich einige Mängel auf.

    Es ist unmöglich, Sitzungsablauf- und Zerstörungsereignisse in Echtzeit zu veröffentlichen.

    Die Serialisierungsmethode unterstützt möglicherweise nicht sehr gut.

    • Redis erfordert 3 Schlüssel zum Speichern eines Sitzungswerts. nimmt etwas mehr Platz ein;

    • Da es sich bei der Sitzung nicht um eine CAS-Operation (Compare And Set) handelt, kann es zu Parallelitätsproblemen (geringfügige Probleme) kommen.

    • Obwohl Spring-Session einige Mängel aufweist, ist es insgesamt immer noch sehr brauchbar. Darüber hinaus können Sie selbst eine Reihe von Filtern schreiben, um die Mängel der Spring-Session zu optimieren und verteilte Sitzungen zu implementieren.

    Das obige ist der detaillierte Inhalt vonWie SpringBoot Spring Session integriert, um verteilte Sitzungen zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie Springboot Jasypt integriert, um die Verschlüsselung von Konfigurationsdateien zu implementieren Wie Springboot Jasypt integriert, um die Verschlüsselung von Konfigurationsdateien zu implementieren Jun 01, 2023 am 08:55 AM

Einführung in Jasypt Jasypt ist eine Java-Bibliothek, die es einem Entwickler ermöglicht, seinem Projekt mit minimalem Aufwand grundlegende Verschlüsselungsfunktionen hinzuzufügen und kein tiefes Verständnis der Funktionsweise der Verschlüsselung erfordert. standardbasierte Verschlüsselungstechnologie. Passwörter, Text, Zahlen, Binärdateien verschlüsseln ... Geeignet für die Integration in Spring-basierte Anwendungen, offene API, zur Verwendung mit jedem JCE-Anbieter ... Fügen Sie die folgende Abhängigkeit hinzu: com.github.ulisesbocchiojasypt-spring-boot-starter2 Die Vorteile von Jasypt schützen unsere Systemsicherheit. Selbst wenn der Code durchgesickert ist, kann die Datenquelle garantiert werden.

Wie SpringBoot Redisson integriert, um eine Verzögerungswarteschlange zu implementieren Wie SpringBoot Redisson integriert, um eine Verzögerungswarteschlange zu implementieren May 30, 2023 pm 02:40 PM

Nutzungsszenario 1. Die Bestellung wurde erfolgreich aufgegeben, die Zahlung erfolgte jedoch nicht innerhalb von 30 Minuten. Die Zahlung ist abgelaufen und die Bestellung wurde automatisch storniert. 2. Die Bestellung wurde unterzeichnet und es wurde 7 Tage lang keine Bewertung durchgeführt. Wenn die Bestellung abläuft und nicht ausgewertet wird, wird die Bestellung standardmäßig positiv bewertet. Wenn der Händler die Bestellung innerhalb von 5 Minuten nicht erhält, wird die Bestellung abgebrochen Es wird eine SMS-Erinnerung gesendet ... Für Szenarien mit langen Verzögerungen und geringer Echtzeitleistung können wir die Aufgabenplanung verwenden, um eine regelmäßige Abfrageverarbeitung durchzuführen. Zum Beispiel: xxl-job Heute werden wir auswählen

So implementieren Sie verteilte Sperren mit Redis in SpringBoot So implementieren Sie verteilte Sperren mit Redis in SpringBoot Jun 03, 2023 am 08:16 AM

1. Redis implementiert das Prinzip der verteilten Sperren und warum verteilte Sperren erforderlich sind. Bevor über verteilte Sperren gesprochen wird, muss erläutert werden, warum verteilte Sperren erforderlich sind. Das Gegenteil von verteilten Sperren sind eigenständige Sperren. Wenn wir Multithread-Programme schreiben, vermeiden wir Datenprobleme, die durch den gleichzeitigen Betrieb einer gemeinsam genutzten Variablen verursacht werden. Normalerweise verwenden wir eine Sperre, um die Richtigkeit der gemeinsam genutzten Variablen sicherzustellen Die gemeinsam genutzten Variablen liegen im gleichen Prozess. Wenn es mehrere Prozesse gibt, die gleichzeitig eine gemeinsam genutzte Ressource betreiben müssen, wie können sie sich dann gegenseitig ausschließen? Heutige Geschäftsanwendungen sind in der Regel Microservice-Architekturen, was auch bedeutet, dass eine Anwendung mehrere Prozesse bereitstellen muss. Wenn mehrere Prozesse dieselbe Datensatzzeile in MySQL ändern müssen, ist eine Verteilung erforderlich, um fehlerhafte Daten zu vermeiden wird zu diesem Zeitpunkt eingeführt. Der Stil ist gesperrt. Punkte erreichen wollen

So lösen Sie das Problem, dass Springboot nach dem Einlesen in ein JAR-Paket nicht auf die Datei zugreifen kann So lösen Sie das Problem, dass Springboot nach dem Einlesen in ein JAR-Paket nicht auf die Datei zugreifen kann Jun 03, 2023 pm 04:38 PM

Springboot liest die Datei, kann aber nach dem Packen in ein JAR-Paket nicht auf die neueste Entwicklung zugreifen. Es gibt eine Situation, in der Springboot die Datei nach dem Packen in ein JAR-Paket nicht lesen kann ist ungültig und kann nur über den Stream gelesen werden. Die Datei befindet sich unter resources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

So implementieren Sie Springboot+Mybatis-plus, ohne SQL-Anweisungen zum Hinzufügen mehrerer Tabellen zu verwenden So implementieren Sie Springboot+Mybatis-plus, ohne SQL-Anweisungen zum Hinzufügen mehrerer Tabellen zu verwenden Jun 02, 2023 am 11:07 AM

Wenn Springboot + Mybatis-plus keine SQL-Anweisungen zum Hinzufügen mehrerer Tabellen verwendet, werden die Probleme, auf die ich gestoßen bin, durch die Simulation des Denkens in der Testumgebung zerlegt: Erstellen Sie ein BrandDTO-Objekt mit Parametern, um die Übergabe von Parametern an den Hintergrund zu simulieren dass es äußerst schwierig ist, Multi-Table-Operationen in Mybatis-plus durchzuführen. Wenn Sie keine Tools wie Mybatis-plus-join verwenden, können Sie nur die entsprechende Mapper.xml-Datei konfigurieren und die stinkende und lange ResultMap konfigurieren Schreiben Sie die entsprechende SQL-Anweisung. Obwohl diese Methode umständlich erscheint, ist sie äußerst flexibel und ermöglicht es uns

Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

Wie SpringBoot Redis anpasst, um die Cache-Serialisierung zu implementieren Wie SpringBoot Redis anpasst, um die Cache-Serialisierung zu implementieren Jun 03, 2023 am 11:32 AM

1. Passen Sie den RedisTemplate1.1-Standard-Serialisierungsmechanismus an. Die API-basierte Redis-Cache-Implementierung verwendet die RedisTemplate-Vorlage für Daten-Caching-Vorgänge. Öffnen Sie hier die RedisTemplate-Klasse und zeigen Sie die Quellcodeinformationen der Klasse publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations an. Schlüssel deklarieren, verschiedene Serialisierungsmethoden des Werts, der Anfangswert ist leer @NullableprivateRedisSe

Praktisches Tutorial zur SpringBoot+Dubbo+Nacos-Entwicklung Praktisches Tutorial zur SpringBoot+Dubbo+Nacos-Entwicklung Aug 15, 2023 pm 04:49 PM

In diesem Artikel wird ein detailliertes Beispiel geschrieben, um über die tatsächliche Entwicklung von Dubbo + Nacos + Spring Boot zu sprechen. In diesem Artikel wird nicht zu viel theoretisches Wissen behandelt, sondern das einfachste Beispiel wird geschrieben, um zu veranschaulichen, wie Dubbo in Nacos integriert werden kann, um schnell eine Entwicklungsumgebung aufzubauen.

See all articles