背景
正常情况下,我们前端一般会用nginx做负载均衡横向扩展,有时候我们会选择IP绑定负载均衡策略,但是很多情况下,我们每个节点可能资源不同,所以能够承受的用户访问量也不同,那么采用权重轮询的负载均衡策略可能会更加有效,这种情况下,我们的后台session就不能放在每个节点了,需要进行共享,我们可以放在数据库或者redis中,通常情况下我们会选择redis,下面介绍用SpringBoot整合spring session+redis。
整合spring session +redis
整合起来其实很简单,如下几步即可。
1、引入依赖
<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>
2、配置文件
spring:
#redis集群
redis:
port: 6379
host: 192.168.157.6
password: 123456
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0
session:
store-type: redis # Session store type.
如果是集群模式,则需要用集群模式的redis配置文件
spring:
#redis集群
redis:
database: 0
jedis:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0
timeout: 10000
cluster:
nodes:
- 127.0.0.1:6379
session:
store-type: redis # Session store type.
3、启动类加上注解
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
设置3600s过期
测试
请求然后发现redis有如下key
spring:session:expirations:1617380520000
spring:session:sessions:7f22b339-52d2-47dd-8538-64e1eecdbd36
spring:session:sessions:expires:7f22b339-52d2-47dd-8538-64e1eecdbd36
并且客户端一直用的是同一个sessionid
完成!