Heim  >  Artikel  >  Java  >  Eine Einführung in die Verwendung von Spring Session und Redis zum Teilen von Sitzungen

Eine Einführung in die Verwendung von Spring Session und Redis zum Teilen von Sitzungen

巴扎黑
巴扎黑Original
2017-09-06 09:24:561723Durchsuche

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zur Verwendung von Spring, Session und Redis zum Teilen von Sitzungen ein. Der Artikel stellt ihn anhand von Beispielcodes ausführlich vor Bitte folgen Sie dem Herausgeber, um gemeinsam zu lernen.

Vorwort

Nachdem wir die Clusterumgebung eingerichtet haben, müssen wir uns mit der Frage befassen, wie mit den durch den Benutzerzugriff generierten Sitzungen umgegangen wird.

Es gibt viele Möglichkeiten, Sitzungen zu verarbeiten. Weitere Informationen finden Sie im vorherigen Blog-Repost: 5 Sitzungsverarbeitungsstrategien in Cluster-/verteilten Umgebungen

Hier wir Besprechen Sie die dritte Methode: Sitzungsfreigabe.

Der Redis-Cluster führt eine Master-Slave-Replikation durch und nutzt die eventuelle Konsistenz der Redis-Datenbank, um Sitzungsinformationen in Redis zu speichern. Wenn der Anwendungsserver feststellt, dass sich die Sitzung nicht im lokalen Speicher befindet, durchsucht er sie in der Redis-Datenbank. Da es sich bei der Redis-Datenbank um eine vom Anwendungsserver unabhängige Datenbank handelt, kann die Sitzung gemeinsam genutzt werden und ist hochverfügbar.

Mängel:

1. Redis erfordert einen großen Speicher, andernfalls wird die Benutzersitzung aus dem Cache gelöscht.

2. Der Cache muss regelmäßig aktualisiert werden

Die vorläufige Struktur ist wie folgt:


Allerdings gibt es immer noch Probleme mit dieser Struktur. Der Redis-Master stellt einen wichtigen Engpass dar. Wenn der Master abstürzt, führt Redis keinen aktiven Master-Switching durch und der Sitzungsdienst wird unterbrochen.

Aber lassen Sie uns zuerst diese Struktur erstellen und sie später optimieren und ändern.

Spring Boot bietet Spring Session zur vollständigen Sitzungsfreigabe.

Offizielle Dokumentation: http://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html#boot-sample

Erstellen Sie zunächst einen einfachen Controller:


@Controller 
public class UserController { 
 
 @RequestMapping(value="/main", method=RequestMethod.GET) 
 public String main(HttpServletRequest request) { 
 HttpSession session = request.getSession(); 
 String sessionId = (String) session.getAttribute("sessionId"); 
 if (null != sessionId) { // sessionId不为空 
 System.out.println("main sessionId:" + sessionId); 
 return "main"; 
 } else { // sessionId为空 
 return "redirect:/login"; 
 } 
 } 
 
 
 @RequestMapping(value="/login", method=RequestMethod.GET) 
 public String login() { 
 return "login"; 
 } 
 
 @RequestMapping(value="/doLogin", method=RequestMethod.POST) 
 public String doLogin(HttpServletRequest request) { 
 System.out.println("I do real login here"); 
 HttpSession session = request.getSession(); 
 String sessionId = UUID.randomUUID().toString(); 
 session.setAttribute("sessionId", sessionId); 
 System.out.println("login sessionId:" + sessionId); 
 return "redirect:/main"; 
 } 
}

Um es einfach auszudrücken: Wenn die Sitzungs-ID vorhanden ist, simulieren Sie den Zugriff zur Startseite, andernfalls zur Anmeldeseite springen.

Wie erreicht man also die Sitzungsfreigabe?

Folgende Abhängigkeiten hinzufügen:


<!-- spring session --> 
<dependency> 
 <groupId>org.springframework.session</groupId> 
 <artifactId>spring-session</artifactId> 
 <version>1.3.0.RELEASE</version> 
</dependency> 
<!-- redis --> 
<dependency> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-redis</artifactId> 
</dependency>

Konfigurationsklasse hinzufügen:


@EnableRedisHttpSession 
public class HttpSessionConfig { 
 @Bean 
 public JedisConnectionFactory connectionFactory() { 
 return new JedisConnectionFactory(); 
 } 
}

Wozu dient diese Konfigurationsklasse?

Offizielle Dokumentation:

Die Spring-Konfiguration ist für die Erstellung eines Servlet-Filters verantwortlich, der die HttpSession-Implementierung durch eine von Spring Session unterstützte Implementierung ersetzt Mit anderen Worten: Diese Konfigurationsklasse kann einen Filter erstellen, der die Funktion von Spring Session anstelle von HttpSession unterstützt.

Die Annotation @EnableRedisHttpSession erstellt eine Spring Bean mit dem Namen springSessionRepositoryFilter. Der Filter ist dafür verantwortlich, die HttpSession-Implementierung zu ersetzen, die von Spring Session unterstützt wird Redis.

Die Annotation @EnableRedisHttpSession erstellt ein Bean-Objekt von springSessionRepositoryFilter, um diesen Filter zu implementieren. Der Filter ist für das Ersetzen von HttpSession verantwortlich.

Mit anderen Worten:

HttpSession spielt keine Rolle mehr, sondern verwendet Redis, um die Sitzung direkt über Filter zu betreiben.

Redis-Konfiguration in application.properties hinzufügen:


Auf diese Weise ist die Sitzungsfreigabe abgeschlossen. Ist es nicht ganz einfach? Der Geschäftscode bedarf nicht einmal einer kleinen Änderung.

spring.redis.host=localhost 
spring.redis.password= 
spring.redis.port=6379

Überprüfung:

Die Redis-Datenbank ist zunächst leer.

Führen Sie das Projekt aus:

Nachdem Sie auf die Seite zugegriffen haben, können Sie die Sitzungsinformationen in Redis sehen.

Nachdem Sie sich beiläufig angemeldet haben:

Geben Sie den Hauptbildschirm ein. Dies bedeutet, dass sessionId in der aktuellen Sitzung vorhanden ist.

Wir prüfen die Cookies der aktuellen Seite. Mit anderen Worten: Dieses Cookie hat eine Sitzungs-ID.

Führen Sie ein neues Projekt mit Port 8081 aus. Öffnen Sie einen neuen Tab direkt im ursprünglichen Browser. Wir wissen, dass das Cookie zu diesem Zeitpunkt geteilt wird. Besuchen Sie localhost:8081/main

Wir haben direkt erfolgreich auf das neue Projekt zugegriffen! ! Das gleiche Cookie kann zum Teilen von Sitzungen auf verschiedenen Webservern verwendet werden.

Abschließend betone ich noch einmal:

Die Implementierung von HttpSession wird durch Spring Session ersetzt. Der Betrieb von HttpSession entspricht dem Betrieb von Daten in Redis.

Das obige ist der detaillierte Inhalt vonEine Einführung in die Verwendung von Spring Session und Redis zum Teilen von Sitzungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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