SpringBoot使用Redis来实现Session共享

demo地址
https://gitee.com/fengzxia/SpringBoot-Redis-Session

  1. 创建一个Maven项目名为 demo1

  2. 需要添加的依赖, 使用的springboot版本是 2.1.4.RELEASE

      <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-data-redisartifactId>
      dependency>
      <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
      dependency>
      <dependency>
        <groupId>org.springframework.sessiongroupId>
        <artifactId>spring-session-data-redisartifactId>
      dependency>
    

    如果使用的是最新版本 2.1.5.RELEASE 或者其以后的版本,则还需要额外添加 Spring Security 依赖,(其他操作不受影响,仅仅只是多了一个依赖,当然也多了 Spring Security 的一些默认认证流程)

  3. 添加redis配置

    server:
      port: 8081
    spring:
      redis:
        host: 127.0.0.1
        port: 9455
        password: 123456
        database: 1
    

    更加详细的配置可参看官方文档

  4. 配置完成后 ,就可以使用 Spring Session 了,其实就是使用普通的 HttpSession ,其他的 Session 同步到 Redis 等操作,SpringBoot框架已经自动帮你完成了

  5. 创建controller来设置session

    @RestController
    @RequestMapping("demo1")
    public class Demo1Controller {
      @GetMapping("set_session")
      public String setSession(HttpServletRequest request) {
        request.getSession().setAttribute("projectName", "demo1");
        return "demo1 install session success";
      }
    
      @GetMapping("get_session")
      public String getSession(HttpServletRequest request) {
        String projectName = (String) request.getSession().getAttribute("projectName");
        return "demo1 get projectName is " + projectName;
      }
    }
    
  6. 参照上边的配置再创建一个项目为 demo2

    1. 修改 server.port8082
    2. 修改controller内容如下
      @RestController
      @RequestMapping("demo2")
      public class Demo2Controller {
        @GetMapping("set_session")
        public String setSession(HttpServletRequest request) {
          request.getSession().setAttribute("projectName", "demo2");
          return "demo2 install session success";
        }
      
        @GetMapping("get_session")
        public String getSession(HttpServletRequest request) {
          String projectName = (String) request.getSession().getAttribute("projectName");
          return "demo2 get projectName is " + projectName;
        }
      }
      
  7. 分别启动demo1demo2两个项目,查看共享效果

    1. 访问 demo1 设置session地址 localhost:8081/demo1/set_session 将 projectName设置为 demo1,访问完后,数据已经自动同步到redis中
      SpringBoot使用Redis来实现Session共享_第1张图片
    2. 访问 demo1 获取session地址 localhost:8081/demo1/set_session 查看 projectName如图
      SpringBoot使用Redis来实现Session共享_第2张图片
    3. 访问 demo2 获取session地址 localhost:8082/demo2/get_session 查看 projectName如图,看到的是demo1设置的projectName
      SpringBoot使用Redis来实现Session共享_第3张图片
    4. 再调用 demo2 的设置session地址 localhost:8082/demo2/set_session,查看redis中的数据,已经被修改
      SpringBoot使用Redis来实现Session共享_第4张图片
    5. 再访问 demo1 查看session,展示的就是 demo2
      SpringBoot使用Redis来实现Session共享_第5张图片
  8. 至此SpringBoot使用Redis来实现Session共享设置成功

真正在项目实际应用中,是通过 Nginx 进行代理自动分配访问哪个项目,而不是想我这样手动修改请求的链接来查看效果

参考博客: https://bestzuo.cn/posts/859382359.html

你可能感兴趣的:(#,SpringBoot,redis)