Övning – Lagra HTTP-sessionsdata i Redis

Slutförd

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

  1. 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>
    
  2. 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.

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

  2. 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:

Skärmbild som visar exempel på utdata för sessionsreplikering.

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.