Övning – Lagra HTTP-sessionsdata i Redis
I den här lektionen lägger du till Spring Session i ditt befintliga Spring Boot-program för att lagra HTTP-sessionsdata i Azure Cache for Redis.
Konfigurera Spring Session
Om du vill lägga till Stöd för Spring Session i ditt program lägger du till följande beroende i avsnittet
<dependencies>
i filen pom.xml:<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
Om du vill konfigurera Spring Session för att använda Redis för sessionsreplikering lägger du till följande rad i src/main/resources/application.properties fil:
spring.session.store-type=redis
Lägga till en ny kontrollant för att testa sessionsreplikering
Lägg till en ny Spring MVC REST-styrenhet i ditt program som ska användas för att testa sessionsreplikering.
Skapa en ny styrenhet med namnet SessionReplicationController bredvid TodoController.
package com.example.demo; import org.springframework.context.annotation.Bean; import org.springframework.session.data.redis.config.ConfigureRedisAction; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpSession; @RestController @RequestMapping("/") public class SessionReplicationController { @Bean public static ConfigureRedisAction configureRedisAction() { return ConfigureRedisAction.NO_OP; } @GetMapping("/session") public String session(HttpSession session) { Integer test = (Integer) session.getAttribute("test"); if (test == null) { test = 0; } else { test++; } session.setAttribute("test", test); return "[" + session.getId() + "]-" + test; } }
Not
Du konfigurerar en specifik
ConfigureRedisAction.NO_OP
Spring-böna eftersom Spring Session som standard försöker konfigurera Redis-nyckelområdesmeddelanden, vilket inte fungerar på skyddade Azure Cache for Redis-instanser. Om du behöver keyspace-meddelanden för Azure Cache for Redis måste du tillämpa dem manuellt via Redis CLI.Keyspace-meddelanden är användbara för WebSockets, men de förbrukar mer resurser. Det aktuella scenariot använder inte WebSockets och bör inte aktivera keyspace-meddelanden.
Starta om programmet för att dra nytta av HTTP-sessionsreplikering.
Replikering av testsessioner
HTTP-sessioner är användarspecifika och underhålls via en cookie. Du kan använda någon av följande metoder för att testa om sessioner fungerar korrekt:
Gå till
http://localhost:8080/session
i din webbläsare och ladda om sidan flera gånger.Kör följande kommandorad flera gånger:
curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
Föregående kommando sparar din cookie i en fil med namnet cookie.txt.
Endera metoden genererar utdata som visar ditt HTTP-sessions-ID med ett tal som ökar efter varje begäran, enligt följande exempel:
Om du vill kontrollera om sessionerna sparas korrekt startar du om servern och kontrollerar att sessionsdata inte går förlorade.
I nästa lektion distribuerar du ditt program till molnet och klustrar HTTP-sessioner mellan din lokala dator och molntjänsten.