spring-session用redis實現session共享實踐


什么是spring session?

Spring Session provides an API and implementations for managing a user’s session information.

簡單一句話,spring session幫你管理用戶的session信息。

為什么使用spring session?

通常情況下,Tomcat、Jetty等Servlet容器,會默認將Session保存在內存中。如果是單個服務器實例的應用,將Session保存在服務器內存中是一個非常好的方案。但是這種方案有一個缺點,就是不利於擴展。

目前越來越多的應用采用分布式部署,用於實現高可用性和負載均衡等。那么問題來了,如果將同一個應用部署在多個服務器上通過負載均衡對外提供訪問,如何實現Session共享?

實際上實現Session共享的方案很多,其中一種常用的就是使用Tomcat、Jetty等服務器提供的Session共享功能,將Session的內容統一存儲在一個數據庫(如MySQL)或緩存(如Redis)中。

使用spring session有以下好處:

  spring session是開源的用戶session管理軟件,免費,易控且容易擴展;

  spring session可以使服務器無狀態;

  服務器宕機或者重啟不會丟失用戶session信息,對用戶更友好。

  不需要負載均衡器保持粘性

  滿足應用和數據隔離原則

為什么使用spring session data redis呢?

  spring session提供了三種主要實現方式REDIS,JDBC,Hazelcast 

上一篇文章已經介紹了jdbc的實現  那為什么很多人更喜歡使用Redis實現呢?

  1.應用要求請求響應流暢,快捷,redis是內存服務器,響應很快

     2. 使用redis做外部存儲,降低了對數據庫或者服務器本身的依賴,更穩定

  3. redis的過期機制更友好

        4. redis的分片和集群機制,擴展性更好

         5. 簡單應用且容易監控

         6. 和spring boot集成更緊密。

spring-session-data-redis實戰

前段時間,寫了篇<spring-session-data-redis解決session共享的問題>文章,介紹了spring-session使用redis存儲實現session共享的內部機制,

有讀者提問為什么只有理論沒有實踐?索性就實踐一下。

1.使用sts創建spring-boot項目,項目名稱session-jdbc,使用redis,web(方便測試)的start,創建完項目如下:

 

2.增加spring-session-redis依賴

        <dependency> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-security</artifactId> 
          </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
      </dependency>

3.配置屬性

spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.password=
spring.redis.port=6379
spring.session.redis.namespace=spring:session
spring.security.user.name=admin
spring.security.user.password=admin
spring.session.redis.cleanup-cron=0 * * * * *

4.增加測試類

package com.example.demo;

import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/redis")
public class TestController {
    @RequestMapping("/welcome")
    public String welcome(HttpSession httpSession) {
        httpSession.setAttribute("hello", "world");
        return "hello world !";

    }
}

5.啟動spring boot項目

6.訪問http://localhost:8080/redis/welcome

 訪問前查看redis情況

 

輸入用戶名密碼 admin/admin

 

訪問后

 

 

總結:

  spring-session-data-redis 使用redis做用戶管理的存儲,主要有以下優點:

1.簡單易用,用戶友好

2.響應快

3.擴展性強

4.穩定性高

5.可監控

參考文獻:

【1】https://www.cnblogs.com/jiafuwei/p/6425604.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM