由于 HTTP 协议是无状态的协议,因而服务端需要记录用户的状态时,就需要用某种机制来识具体的用户。Session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。
当用户量比较大时候一个tomcat可能无法处理更多的请求,超过单个tomcat的承受能力,可能会出现用户等待,严重的导致tomcat宕机。此时我们需要对程序使用集群部署,如下图描述,使用nginx负载均衡方案:若没有session共享同步,可能在tomcat1登录了,下一次请求被分派到tomcat2上,这时候用户就需要重新登录。
3.使用springboot集成redis实现session共享方案的主要步骤:
3.1 pom.xml引入redis相关依赖文件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- redis-session共享 --> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>3.2 application.yml文件配置redis相关信息
spring: thymeleaf: cache: false redis: database: 0 host: 127.0.0.1 port: 6379 ## Redis服务器连接密码(默认为空) password: 123456 ## 连接超时时间(毫秒) timeout: 100 ## 连接池中的最大连接数 poolMaxTotal: 20 ## 连接池中的最大空闲连接 poolMaxIdle: 10 ## 连接池最大阻塞等待时间(使用负值表示没有限制) poolMaxWait: 3 ##开启集群模式 session: store-type: redis timeout: 600 #秒
3.3 新建RedisSessionConfig.java类
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}
源码下载
微信扫码关注DEMO程序园公众号