練習 - 將 HTTP 工作階段資料儲存在 Redis 中

已完成

在此單元中,將 Spring Session 新增至現有的 Spring Boot 應用程式,以將 HTTP 工作階段資料儲存在 Azure Cache for Redis 內。

設定 Spring 工作階段

  1. 若要在您的應用程式中新增 Spring 工作階段支援,請在 pom.xml 檔案的 <dependencies> 區段中新增下列相依性:

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    
  2. 若要設定 Spring Session 以將 Redis 用於工作階段複寫,請將下列行新增至 src/main/resources/application.properties 檔案:

    spring.session.store-type=redis
    

新增控制器以測試工作階段複寫

將新的 Spring MVC REST 控制器新增至您的應用程式,以用於測試工作階段複寫。

  1. TodoController 旁邊建立稱為 SessionReplicationController 的新控制器。

    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;
        }
    }
    

    注意

    您可以設定特定的 ConfigureRedisAction.NO_OP Spring bean,因為 Spring Session 預設會嘗試設定 Redis keyspace 通知,而這不適用於安全的 Azure Cache for Redis 執行個體。 如果您需要 Azure Cache for Redis 的 keyspace 通知,您必須透過 Redis CLI 手動進行套用。

    Keyspace 通知適用於 WebSocket,但其會耗用更多資源。 目前的案例不會使用 WebSocket,且不應該啟用 keyspace 通知。

  2. 重新啟動您的應用程式,以受益於 HTTP 工作階段複寫。

測試工作階段複寫

HTTP 工作階段是使用者專屬的,可透過 Cookie 進行維護。 您可以使用下列任一方法來測試工作階段是否正常運作:

  • 將瀏覽器指向 http://localhost:8080/session 並重新載入頁面數次。

  • 執行下列命令列數次:

    curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
    

    上述命令會將 Cookie 儲存在名為 cookie.txt 的檔案中。

任一種方法都會產生輸出,以顯示 HTTP 工作階段識別碼,而其數字會在每個要求之後遞增,如下列範例所示:

Screenshot that shows example output for session replication.

若要檢查是否已正確保存工作階段,您可以重新啟動伺服器,並確認工作階段資料並未遺失。

在下一個單元中,您會將應用程式部署至雲端,以及本機電腦與雲端服務之間的叢集 HTTP 工作階段。