1.創建SpringBoot項目添加依賴
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2.完整pomxml文件

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.sunny.spring.boot</groupId> <artifactId>springboot-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--session相關--> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3.application.yml配置
redis連接信息需要修改為自己的
spring: session: store-type: redis #session的存儲方式 redis: host: 192.168.31.170 port: 6379 password: admin@1009
4.創建Controller獲取session信息
package com.sunny.spring.boot.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; /** * @ClassName: SessionController * @Description: session操作 * @Author: sunt * @Date: 2019/8/26 14:53 * @Version 1.0 **/ @RequestMapping("/session") @RestController public class SessionController { /** * 獲取session信息 * @param request * @return */ @RequestMapping("/getSeesion") public String getSeesion(HttpServletRequest request) { String sessionId = request.getSession().getId(); int serverPort = request.getServerPort(); System.out.println("當前請求session:" + sessionId); return "請求服務器端口號:" + serverPort + ",當前服務器的seionId:" + sessionId; } }
5.啟動redis服務
6.啟動項目並訪問
啟動如果報如下錯誤信息,需要檢查redis連接信息是否配置准確
本地訪問:http://127.0.0.1:8080/session/getSeesion 可以獲取到sessionid說明項目可以正常啟動和訪問,接下來需要配置nginx部署多個應用程序實現負載均衡
7.nginx負載均衡配置
編輯nginx.conf配置文件,需要做如下配置即可
- 在http節點配置所需負載的應用地址
#配置負載地址 upstream session-redis { server 127.0.0.1:18081 weight=1; #weight是權重的意思,值越大分配訪問的概率越大 server 127.0.0.1:18082 weight=3; server 127.0.0.1:18083 weight=2; }
- 在server節點下的location配置訪問地址
proxy_pass http://session-redis;
注意:session-redis必須要與上一步upstream后面的名稱保持一致,這個名稱無要求自己隨意指定
- 校驗nginx配置文件是否准確並重新加載nginx配置信息
./sbin/nginx -t
./sbin/nginx -s reload
8.部署多個應用程序
按照nginx負載均衡配置,同一個應用程序以18081,18082,18083端口部署三份,並為各自端口分別指定輸出日志到server1.log、server2.log、server3.log
nohup java -jar springboot-demo-0.0.1-SNAPSHOT.jar --server.port=18081 > server1.log &
nohup java -jar springboot-demo-0.0.1-SNAPSHOT.jar --server.port=18082 > server2.log &
nohup java -jar springboot-demo-0.0.1-SNAPSHOT.jar --server.port=18083 > server3.log &
9.測試
瀏覽器訪問默認nginx的80端口,如果可以正常轉發到各個應用程序並且訪問到每個應用程序的session會話一致說明配置負載和session共享搭建成功
這里本來打算錄制個gif操作圖,但是錄制了好幾次都太大只能保存一部分,有好的gif錄制麻煩評論區推薦一波,這里就截圖展示
通過瀏覽器訪問獲取session請求:http://192.168.31.170/session/getSeesion不斷刷新,可以看到sever*.log隨機輸出日志,但是訪問到serve1的頻率最低(1次),說明我們配置的權重也生效
頁面訪問展示
日志文件截圖展示
10.查看redis緩存session信息