springboot使用redis缓存用户session实现session共享

0 637

1 什么是 Session

由于 HTTP 协议是无状态的协议,因而服务端需要记录用户的状态时,就需要用某种机制来识具体的用户。Session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。

2 为什么需要同步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 {

}

源码下载

评论