Spring-SESSION+Redis 实现Session共享
Posted pinghengxing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring-SESSION+Redis 实现Session共享相关的知识,希望对你有一定的参考价值。
Spring-SESSION+Redis 实现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
以上是关于Spring-SESSION+Redis 实现Session共享的主要内容,如果未能解决你的问题,请参考以下文章
spring-session用redis实现session共享实践
spring-session实现session共享案例(单点登录)
原保存一下之前spring-session的redis单点登录配置文件跨域
将 spring-session 和 Redis 添加到现有的 Spring Boot Spring Security 配置中