Spring-SESSION+Redis 实现Session共享
Spring-SESSION+Redis 实现Session共享
通常情况下,Tomcat的Servlet容器会默认将Session保存在内存中。如果是单个服务器实例的应用,将Session保存在服务器内存中是一个常用的选择,但是随着服务器数量的增多,这种方法变得不容易扩展,因此需要进行session共享。
关于session共享的方式有多种:
(1)通过nginx的ip_hash,根据ip将请求分配到对应的服务器
(2)基于关系型数据库存储
(3)基于cookie存储
(4)服务器内置的session复制域
(5)基于nosql(memcache、redis都可以)
常用的就是1和5,下面研究第5种方式,基于nosql(redis)存储session。
下边基于springboot进行session共享配置:
1、pom.xml中引入Redis相关的依赖
<!-- 缓存数据库相关-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!--spring-session-redis sessiong共享 -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>2、配置 application.properties
#配置spring_session共享redis #Redis spring.redis.host=140.143.XX.XX ## Redis服务器连接端口 spring.redis.port=6379 ## 连接超时时间(毫秒) spring.redis.timeout=300ms ## Redis服务器连接密码(默认为空) spring.redis.password=ww
3、设置Redis配置,并开启session缓存
@EnableRedisHttpSession
public class RedisSessionConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private int redisPort;
@Value("${spring.redis.password}")
private String redisPassword;
/**
* 配置连接工厂
* @return
*/
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(redisHost, redisPort);
redisStandaloneConfiguration.setPassword(RedisPassword.of(redisPassword));
return new JedisConnectionFactory(redisStandaloneConfiguration);
}
}4、编写一个Controller并进行测试
@RestController
public class RedisSessionTestController {
@RequestMapping(value = "/sessionInsert")
public String insert(String key,String value, HttpSession session){
session.setAttribute(key,value);
return "success";
}
@RequestMapping(value = "/sessionGet")
public String delete(String key,HttpSession session){
String value = (String) session.getAttribute(key);
return key+":"+ value;
}}启动两个服务进行测试,端口分别为8000 ,8001,两台服务均可获取到session
测试结果:
浏览器中输入http://localhost:8000/sessionInsert?key=name&value=中国 创建session

- 访问8000端口,获取session
-

访问8001端口,获取session
