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

发布了131 篇原创文章 · 获赞 22 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/u014534808/article/details/103996169