SpringBoot 分布式session共享方案(并且可实现session在多个项目中共享)

前言

单机环境下我们Session是存储在应用服务的内存中,但是在分布式环境 下,这种存储在应用服务器内存的方案显然不能实现session共享。本次我们将介绍spring-session实现分布式环境下Session共享方案,Session信息存储在redis中。
版本

spring-session 2.1.4.RELEASE
实现步骤

  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>

spring-session-data-redis 依赖的作用是引入将Session写入redis的工具类。
2. 添加Session配置类

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

maxInactiveIntervalInSeconds 属性用来设置Session失效的时间,单位是秒,-1表示永不失效。如果配置1小时失效则是60 * 60 * 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服务器上,由于是第一次请求,所以Tomcat会给当前会话生成一个Session。该Session中中保存了sessionId,creationTime,lastAccessedTime等信息。其中sessionId是4cebb851-b9b2-488e-9569-9ace9298bb67我们手动设置到Session中的用户信息是{“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

说明:前面的spring:session是Spring Session保存Session信息的前缀名称。
然后,我们请求获取用户信息接口,接口请求到了192.168.226.112服务器,可以获取到登录用户信息。

 

。。。。。。。。。。。。。。。。。


版权原因,完整文章,请参考如下:

SpringBoot 分布式session共享方案(并且可实现session在多个项目中共享)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值