# SpringBoot通过Redis实现Session共享 **Repository Path**: fengzxia/SpringBoot-Redis-Session ## Basic Information - **Project Name**: SpringBoot通过Redis实现Session共享 - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-06-19 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringBoot使用Redis来实现Session共享 > demo地址 > https://gitee.com/fengzxia/SpringBoot-Redis-Session 1. 创建一个Maven项目名为 `demo1` 2. 需要添加的依赖, 使用的springboot版本是 `2.1.4.RELEASE` ```xml org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-web org.springframework.session spring-session-data-redis ``` > 如果使用的是最新版本 `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 ``` > 更加详细的配置可参看[官方文档](https://docs.spring.io/spring-session/docs/2.1.4.RELEASE/reference/html5/guides/boot-redis.html) 4. 配置完成后 ,就可以使用 Spring Session 了,其实就是使用普通的 HttpSession ,其他的 Session 同步到 Redis 等操作,SpringBoot框架已经自动帮你完成了 5. 创建controller来设置session ```java @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.port` 为 `8082` 2. 修改controller内容如下 ```java @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. 分别启动`demo1`和`demo2`两个项目,查看共享效果 1. 访问 `demo1` 设置session地址 [localhost:8081/demo1/set_session](http://localhost:8081/demo1/set_session) 将 `projectName`设置为 `demo1`,访问完后,数据已经自动同步到redis中 ![UTOOLS1560923374399.png](https://i.loli.net/2019/06/19/5d09ccf2c611d46158.png) 2. 访问 `demo1` 获取session地址 [localhost:8081/demo1/set_session](http://localhost:8081/demo1/set_session) 查看 `projectName`如图 ![UTOOLS1560923453196.png](https://i.loli.net/2019/06/19/5d09cd41d08c387157.png) 3. 访问 `demo2` 获取session地址 [localhost:8082/demo2/get_session](http://localhost:8082/demo2/get_session) 查看 `projectName`如图,看到的是demo1设置的`projectName` ![UTOOLS1560923590048.png](https://i.loli.net/2019/06/19/5d09cdca630ae64355.png) 4. 再调用 `demo2` 的设置session地址 [localhost:8082/demo2/set_session](http://localhost:8082/demo2/set_session),查看redis中的数据,已经被修改 ![UTOOLS1560923729034.png](https://i.loli.net/2019/06/19/5d09ce551435256408.png) 5. 再访问 `demo1` 查看session,展示的就是 `demo2` ![UTOOLS1560923794859.png](https://i.loli.net/2019/06/19/5d09ce96e712e21538.png) 8. 至此SpringBoot使用Redis来实现Session共享设置成功 > 真正在项目实际应用中,是通过 `Nginx` 进行代理自动分配访问哪个项目,而不是想我这样手动修改请求的链接来查看效果 参考博客: https://bestzuo.cn/posts/859382359.html