前言:
现如今很少使用单服务的架构了,不说都使用分布式架构部署, 至少都是高可用的服务。在多个服务器搭建集群的情况下,Seession共享就是必须面对的问题了。话不多说直接开干
第一步:导入依赖
<!--mvc模块方便测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--redis模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--session模块-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
第二步:配置
spring:
redis:
host: xxx.xxx.xx.xxx
port: 6379
database: 0
password:
session:
store-type: redis
第三步:代码编写
@RestController
public class SessionTest {
@Autowired
private RedisTemplate redisTemplate;
//向session中存入数据
@GetMapping("/addsession")
public Map<String,Object> addSession(HttpServletRequest request){
String id = request.getSession().getId();
String uri = request.getRequestURI()+":"+request.getServerPort();
//像session存储数据 一会儿拿看是否能拿到
request.getSession().setAttribute("test","这是一条测试是否能共享得数据。。。");
Map<String,Object> map=new HashMap<>();
map.put("sessionid",id);
map.put("uri",uri);
return map;
}
//从session中取出数据
@GetMapping("/getsession")
public Map<String,Object> getSession(HttpServletRequest request){
String id = request.getSession().getId();
String uri = request.getRequestURI()+":"+request.getServerPort();
String test = (String)request.getSession().getAttribute("test");
Map<String,Object> map=new HashMap<>();
map.put("sessionid",id);
map.put("uri",uri);
map.put("test",test);
return map;
}
}
测试
先将springboot项目打成jar包
然后分别运行于不同的端口,这里使用8080和8081
java -jar sessiontest-0.0.1-SNAPSHOT.jar --server.port=8080
java -jar sessiontest-0.0.1-SNAPSHOT.jar --server.port=8081
使用postman进行测试
一、使用8080端口的服务像session中存入数据
二、使用8081的服务从session中拿数据
最后查看一下redis数据库
可以看到session的数据确实存在于redis,即集群实现了session共享