SpringBoot2.x 整合Spring-Session实现Session共享(基于redis)

前言:

现如今很少使用单服务的架构了,不说都使用分布式架构部署, 至少都是高可用的服务。在多个服务器搭建集群的情况下,Seession共享就是必须面对的问题了。话不多说直接开干

第一步:导入依赖

        <!--mvc模块方便测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--redis模块-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--session模块-->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

第二步:配置

spring:
  redis:
    host: xxx.xxx.xx.xxx
    port: 6379
    database: 0
    password:
  session:
    store-type: redis

第三步:代码编写


@RestController
public class SessionTest {
    
    

    @Autowired
    private RedisTemplate redisTemplate;

    //向session中存入数据
    @GetMapping("/addsession")
    public Map<String,Object> addSession(HttpServletRequest request){
    
    
        String id = request.getSession().getId();
        String uri = request.getRequestURI()+":"+request.getServerPort();
        //像session存储数据 一会儿拿看是否能拿到
        request.getSession().setAttribute("test","这是一条测试是否能共享得数据。。。");

        Map<String,Object> map=new HashMap<>();
        map.put("sessionid",id);
        map.put("uri",uri);
        return map;
    }
    
    //从session中取出数据
    @GetMapping("/getsession")
    public Map<String,Object> getSession(HttpServletRequest request){
    
    
        String id = request.getSession().getId();
        String uri = request.getRequestURI()+":"+request.getServerPort();
        String test = (String)request.getSession().getAttribute("test");

        Map<String,Object> map=new HashMap<>();
        map.put("sessionid",id);
        map.put("uri",uri);
        map.put("test",test);
        return map;
    }
}

测试

先将springboot项目打成jar包
在这里插入图片描述
然后分别运行于不同的端口,这里使用8080和8081

java -jar sessiontest-0.0.1-SNAPSHOT.jar --server.port=8080
java -jar sessiontest-0.0.1-SNAPSHOT.jar --server.port=8081

使用postman进行测试

一、使用8080端口的服务像session中存入数据
在这里插入图片描述
二、使用8081的服务从session中拿数据
在这里插入图片描述
最后查看一下redis数据库
在这里插入图片描述
可以看到session的数据确实存在于redis,即集群实现了session共享

猜你喜欢

转载自blog.csdn.net/weixin_45647685/article/details/112855303