当前位置: 代码网 > it编程>编程语言>Java > SpringBoot整合Redis实现Session共享解决Nginx负载均衡问题

SpringBoot整合Redis实现Session共享解决Nginx负载均衡问题

2026年09月06日 Java 我要评论
最近使用spring boot开发一个系统,nginx做负载均衡分发请求到多个tomcat,此时访问页面会把请求分发到不同的服务器,session是存在服务器端,如果首次访问被分发到a服务器,那么se

最近使用spring boot开发一个系统,nginx做负载均衡分发请求到多个tomcat,此时访问页面会把请求分发到不同的服务器,session是存在服务器端,

如果首次访问被分发到a服务器,那么session就会被存到a服务器,再次访问时负载均衡会分发到b服务器那么第一次访问的session信息就会获取不到之前的session信息,

所以需要实现session共享,还好有spring session,使用简单的配置即可实现session共享,

下面介绍下:

1. pom.xml中引入

spring-session-data-redis jar包

<!-- spring boot 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>org.springframework.session</groupid>
 <artifactid>spring-session-core</artifactid>
 </dependency>

2. 添加redissessionconfig配置类

在项目的目录中,创建一个java文件(名称随意)即可,我这里名称是redissessionconfig.java

@enableredishttpsession 这个注解非常最重要,加了它之后,会使用spring的一个拦截器来实现session共享的操作,而配置的这个bean,则是让spring根据配置文件中的配置连到redis。

springsession 需要注意的就是redis需要2.8以上版本,然后开启事件通知,在redis配置文件里面加上

notify-keyspace-events ex // 打开此配置,其中ex表示键事件通知里面的key过期事件,每当有过期键被删除时,会发送通知

或是使用如下命令开启开启事件通知:

redis-cli config set notify-keyspace-events egx

如果你的redis不是你自己维护的,比如你是使用阿里云的redis数据库(我就是这种情况),你不能够更改它的配置,那么可以使用下面的java配置文件即可。

package org.spring.springboot.config;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.session.data.redis.config.configureredisaction;
import org.springframework.session.data.redis.config.annotation.web.http.enableredishttpsession;
@configuration
// maxinactiveintervalinseconds 默认是1800秒过期,这里测试修改为60秒
@enableredishttpsession(maxinactiveintervalinseconds = 1800)
public class redissessionconfig {
 @bean
 public static configureredisaction configureredisaction() {
 return configureredisaction.no_op;
 }
}

3. 配置redis连接

spring boot会自动创建一个redisconnectionfactory将spring session连接到端口6379(默认端口)上localhost上的redis服务器的连接。

在生产环境中,您需要确保更新配置以指向redis服务器

src/main/resources/application.properties

# redis 配置
# redis数据库索引(默认为0)
spring.redis.database=0
# redis服务器地址
spring.redis.host=192.168.0.1
# redis服务器连接端口
spring.redis.port=6379
# redis服务器连接密码(默认为空)
spring.redis.password=1234

上面三个步骤搞定后,即可session共享。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com