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