SpringBoot使用Redis来实现Session共享

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

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

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

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>
      <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>
    

    如果使用的是最新版本 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_sessionprojectName设置为 demo1,访问完后,数据已经自动同步到redis中
      UTOOLS1560923374399.png
    2. 访问 demo1 获取session地址 localhost:8081/demo1/set_session 查看 projectName如图
      UTOOLS1560923453196.png
    3. 访问 demo2 获取session地址 localhost:8082/demo2/get_session 查看 projectName如图,看到的是demo1设置的projectName
      UTOOLS1560923590048.png
    4. 再调用 demo2 的设置session地址 localhost:8082/demo2/set_session,查看redis中的数据,已经被修改
      UTOOLS1560923729034.png
    5. 再访问 demo1 查看session,展示的就是 demo2
      UTOOLS1560923794859.png
  8. 至此SpringBoot使用Redis来实现Session共享设置成功

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

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值