SpringBoot集成springsession利用redis来实现session共享

一、前言

1.场景:

当我们项目应用搭建了集群,就会产生session共享问题。因为session是保存在服务器上面的。

2.解决方案:

a.通过nginx的负载均衡其中一种ip绑定来实现(通过ip绑定服务器其中一台,就没有集群概念了);
b.通过cookie备份session实现(因为cookie数据保存在客户端,所以不安全);
c.通过redis备份session实现(可靠);

二、通过SpringBoot集成springsession利用redis来实现session共享
注意:在此之前你要搭建redis服务端
1.在spring boot的文档中,告诉我们添加@EnableRedisHttpSession来开启spring session支持,配置如下:

@Configuration  
@EnableRedisHttpSession  
public class RedisSessionConfig {  
} 

2.而@EnableRedisHttpSession这个注解是由spring-session-data-redis提供的,所以在pom.xml文件中添加:

<dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-redis</artifactId>  
</dependency>  
<dependency>  
        <groupId>org.springframework.session</groupId>  
        <artifactId>spring-session-data-redis</artifactId>  
</dependency> 

3.属性文件配置分为两种
a. application.properties属性文件配置:

#redis配置
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
#Redis密码
spring.redis.password=redis密码
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
#springboot内置tomcat的端口设置
server.port=8080  

b. application.yml属性文件配置:

server:
  port: 8080
spring:
    redis:
        host: localhost
        password: 123
        port: 6379
        pool:
          max-idle: 100
          min-idle: 1
          max-active: 1000
          max-wait: -1

4.测试Controllter代码,注意:记得相关对象要 implements Serializable要不会报错!

@Controller
public class HelloController {

    /***
     * session共享测试
     * 
     * @param request
     * @return
     */
    @RequestMapping("/testSessionId")
    @ResponseBody
    public Map<String, Object> testSessionId(HttpServletRequest request){
        Map<String, Object> sessionIdMap = new HashMap<String, Object>();
        //获取sessionId
        String strSessionId = request.getSession().getId();
        int iPort = request.getServerPort();
        sessionIdMap.put("服务器端口:", iPort);
        sessionIdMap.put("sessionId:", strSessionId);        
        return sessionIdMap ;
    }
}

5.测试8080服务器返回结果:

{"sessionId:":"fbb6d066-4275-4909-8c3f-eb2111ca6cc4","服务器端口:":8080}

这里写图片描述
6.测试8081服务器返回结果:

{"sessionId:":"fbb6d066-4275-4909-8c3f-eb2111ca6cc4","服务器端口:":8081}

这里写图片描述

结语:这样就实现了SpringBoot集成springsession利用redis来实现session共享,如果作者说的有误的,请多多指教!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值