springboot 使用redis 实现session共享

说明:在工程项目需求很大的情况下,部署项目的时候可能会使用分布式部署或者集群,这样的跨服务器使用的时候,session就会出现丢失,这个时候可以使用redis共享session

一:导包

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    </dependencies>

 

二:配置redis 信息

spring.redis.host=127.0.0.1
spring.redis.port=6379

 

三:配置启动类

@SpringBootApplication
@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 1800) //spring在多长时间后强制使redis中的session失效,默认是1800.(单位/秒)
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

 

四:写controller进行测试

//测试redis
@GetMapping("/testRedis")
public AjaxResult test1(HttpSession session) throws Exception{
//RedisCache.setStr(String.valueOf(utils.getNowTimeSecond()),(String) SecurityUtils.getSubject().getSession().getId());
//RedisCache.setStr(String.valueOf(utils.getNowTimeSecond()),String.valueOf(session.getId()));

session.setAttribute("admin","haha");
String haha = (String) session.getAttribute("admin");
return new AjaxResult(session.getId()+"----"+haha);
}

@GetMapping("/getRedis")
public AjaxResult test2(HttpSession session) throws Exception{
//RedisCache.setStr(String.valueOf(utils.getNowTimeSecond()),(String) SecurityUtils.getSubject().getSession().getId());
//RedisCache.setStr(String.valueOf(utils.getNowTimeSecond()),String.valueOf(session.getId()));
String haha = (String) session.getAttribute("admin");
return new AjaxResult(haha);
}

 

这样的话,session就保存到到了redis中,可查看key值为spring:session:sessions进行查看.

 

退出后,redis中的session失效.

如不自动退出,到了"过程3"中配置的@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 3600) 时间后,redis中的session也会自动失效.

 

 

在这个过程中出现的坑:jar包版本冲突,最主要的是,我使用的版本和springboot的版本一致竟然都不行,然后我就使用的最新的版本:

<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>

 

posted @ 2019-02-14 14:41  文刀水告  阅读(1492)  评论(0编辑  收藏  举报