SpringBoot 分佈式session共享方案

前言

單機環境下我們session是存儲在應用服務的內存中,但是在分佈式環境 下,這種存儲在應用服務器內存的方案顯然不能實現session共享。本次我們將介紹SpringBoot+Redis實現分佈式環境下Session共享方案。

實現步驟

  1. 首先引入依賴
	<!--redis的依賴-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
		</dependency>
		<dependency>
			<groupId>io.lettuce</groupId>
			<artifactId>lettuce-core</artifactId>
			<version>5.1.1.RELEASE</version>
		</dependency>

spring-session-data-redis 依賴的作用是將session保存到redis的工具類。
2. 添加Session配置類

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = -1)
public class SessionConfig {}

maxInactiveIntervalInSeconds 屬性表示Session失效的時間,單位是毫秒,-1表示永不失效。
3. 配置redis

spring.redis.host=192.168.226.111
spring.redis.database=0
spring.redis.port=6379

測試步驟

將應用分別部署到兩臺服務上,然後通過nginx 實現負載均衡,如下,我將應用配置在了192.168.226.111和192.168.226.112服務器上,然後配置nginx 做轉發,配置如下:

upstream bootDemo {
	server 192.168.226.111:8080;
	server 192.168.226.112:8080;
} 
server {
    listen       80;
    server_name  shoptest.jss.com.cn;
	 location /spring-boot-session/ {
            proxy_pass http://bootDemo/spring-boot-session/;
        }
}

然後,調用登錄接口,接口請求的是192.168.226.112服務器,當前會話的sessionId是4cebb851-b9b2-488e-9569-9ace9298bb67存儲的用戶信息是{“password”:“123123”,“userName”:“ceshi”}
然後,我們我們通過 keys "*session*"指令可以找到 當前存入的用戶如下圖所示:
在這裏插入圖片描述
相關key的說明如下:

 //存儲 Session 數據,數據類型hash,可以使用type查看
        Key:spring:session:sessions:4cebb851-b9b2-488e-9569-9ace9298bb67

        //Redis TTL觸發Session 過期。(Redis 本身功能),數據類型:String
        Key:spring:session:sessions:expires:4cebb851-b9b2-488e-9569-9ace9298bb67

        //執行 TTL key ,可以查看剩餘生存時間
        //定時Job程序觸發Session 過期。(spring-session 功能),數據類型:Set
        Key:spring:session:expirations:133337740000

然後,我們請求獲取用戶信息接口,接口請求到了192.168.226.112服務器,可以獲取到登錄用戶信息。
在這裏插入圖片描述

源代碼地址:

https://github.com/XWxiaowei/spring-boot-session-demo

發佈了144 篇原創文章 · 獲贊 24 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章