• 使用redis快速实现session共享,springboot


    1.引入依赖

    <dependency>
        <groupId>org.springframework.sessiongroupId>
        <artifactId>spring-session-data-redisartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-data-redisartifactId>
    dependency>>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在上面的示例中,除了引入Redis组件外,还需要引入spring-session-data-redis依赖。通过此组件实现Session信息的管理。

    2.添加session配置类

    package com.yangjunbo.JPADemo.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
    
    @Configuration
    @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
    public class SessionConfig {
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述上面的示例配置了Session的缓存时间。maxInactiveIntervalInSeconds用于设置Session的失效时间,使用Redis共享Session之后,原Spring Boot的server.session.timeout属性不再有效。经过上面的配置后,Session调用就会自动去Redis上存取。另外,想要达到Session共享的目的,只需要在其他系统上进行同样的配置即可。

    3.验证测试

    创建测试类

    
    package com.yangjunbo.JPADemo;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpSession;
    import java.util.UUID;
    
    @RestController
    @RequestMapping()
    public class Controller {
    
        @RequestMapping("/uid")
        String uid(HttpSession session) {
            UUID uid = (UUID) session.getAttribute("uid");
            if (uid == null) {
                uid = UUID.randomUUID();
            }
            session.setAttribute("uid", uid);
            return session.getId();
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    然后,启动项目,运行一个程序实例,启动端口号为8080,在浏览器中输入地址:http://localhost:8080/uid,页面返回会话的sessionId。
    在这里插入图片描述
    我们可以登录Redis客户端,查看Session是否已经保存到Redis,输入“keys ‘sessions’”查看所有的Session信息,如图所示。
    一般mac上redis的安装目录 /usr/local/opt/redis/bin/redis-server /usr/local/etc/redis.conf
    在这里插入图片描述从上面的输出可以看到,sessionId是5c7b3e44-1695-4d2d-9955-a8ec80309eaa,与页面返回的sessionId一致。说明Redis中缓存的SessionId和实际使用的Session一致,Session已经在Redis中进行了有效的管理。

    最后,模拟分布式系统再启动一个程序实例,启动端口号为8001,在浏览器中输入http://localhost:8001/uid,页面返回会话的SessionId如图所示。
    在这里插入图片描述在这里插入图片描述

    从输出结果可以看到,程序实例1和程序实例2获取的是同一个Session,这说明两个程序实现了Session共享。

    参考书籍 《springboot从入门到实战-章为忠著》

  • 相关阅读:
    2-31 基于matlab的微表情识别
    假设检验2
    k8s日志收集
    C语言 位操作
    ABC212
    宝塔站点配置
    JS Regex
    计硕3班-陈陇刚-2022222278-第二章 递归与分治策略 作业
    花菁染料CY3/CY5/CY7标记糖/氨基半乳糖/氨基葡萄糖/果糖/鼠李糖
    汇编基础知识
  • 原文地址:https://blog.csdn.net/Rockandrollman/article/details/128053417