Springboot 使用Redis+Session实现Session共享 (Redis使用五)

我这边对应redis的使用介绍分开五篇,此为篇章五。

(建议初学者五篇都看看,那对于redis的基本使用操作及一些消息的订阅分布都是没问题的了)

 

 

首先,导包。

在pom.xml文件里面加入以下:


   org.springframework.boot
   spring-boot-starter-data-redis



   org.springframework.session
   spring-session-data-redis

jar包不做多解释了,看那个artifactId的内容应该能知道干啥的。

然后是yml文件:

spring:
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    password:
    jedis.pool.max-idle: 100
    jedis.pool.max-wait: -1ms
    jedis.pool.min-idle: 2
    timeout: 2000ms

是的,很精简。

然后是,到你的RedisConfig文件上面,开启redis的session关联注解(其实不用这个注解也是没问题的,后面自己可以去除看看。)

@EnableRedisHttpSession(maxInactiveIntervalInSeconds=60) 这边是设置存入redis里面的值的过期时间。

默认不设置的话,是1800秒即30分钟。

@EnableRedisHttpSession

如:

Springboot 使用Redis+Session实现Session共享 (Redis使用五)_第1张图片

OK,我们开始共享session咯!

在controller文件里面写2个方法吧,

@GetMapping("/setSessionValue")
public String setredisResult(HttpServletRequest request){
    request.getSession().setAttribute(request.getSession().getId(), "---测试数据---"+request.getRequestURL());

    System.out.println(request.getSession().getId());
    return "set成功,已经存入session域且redis里面也会有值";
}

@GetMapping("/getSessionValue")
public String redisResult(HttpServletRequest request) {
    System.out.println(request.getSession().getId());
    String value = String.valueOf(request.getSession().getAttribute(request.getSession().getId()));
    
    return "取值成功         :"+value;
}

先运行第一个, 如下:

Springboot 使用Redis+Session实现Session共享 (Redis使用五)_第2张图片

控制台打印出sessionid值:

 

然后再瞟一眼redis数据库,是的,没错,可以看到redis也存储了这个session会话的相关信息。 (TTL是过期时间)

Springboot 使用Redis+Session实现Session共享 (Redis使用五)_第3张图片

Springboot 使用Redis+Session实现Session共享 (Redis使用五)_第4张图片

 

然后访问下第二个接口,可以看到根据sessionid作为Key去session域是能正常获取值的,

Springboot 使用Redis+Session实现Session共享 (Redis使用五)_第5张图片

 

好了,redis实现session共享到此其实已经完毕了!

有人可能会有疑问,怎么体现共享了? 这时候,你如果实现负载均衡,开启两个tomcat服务器,不同端口,然后用通过浏览器通过不同端口去访问,你会发现,通过request.getSession().getId()拿出来的sessionid是一样一样的!

 

就到此吧。

 

你可能感兴趣的:(Redis,跟我一起玩转,SpringBoot)