学习 Spring-Session+Redis 实现 session 共享的方法
这里有新鲜出炉的 Redis 命令参考, 程序狗速度看过来!
Redis Key-Value 数据库
Redis 是一个开源的使用 ANSI C 语言编写支持网络可基于内存亦可持久化的日志型 Key-Value 数据库, 并提供多种语言的 API
本篇文章主要介绍了学习 Spring-Session+Redis 实现 session 共享的方法, 具有一定的参考价值, 感兴趣的小伙伴们可以参考一下
1 添加依赖
- <dependency>
- <groupId>org.springframework.session</groupId>
- <artifactId>spring-session-data-redis</artifactId>
- <version>1.2.1.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>2.8.1</version>
- </dependency>
2 配置
- spring-mvc.xml:
- <bean id="redisHttpSessionConfiguration"
- class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
- <property name="maxInactiveIntervalInSeconds" value="600"/>
- </bean>
- <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
- <property name="maxTotal" value="100" />
- <property name="maxIdle" value="10" />
- </bean>
- <bean id="jedisConnectionFactory"
- class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">
- <property name="hostName" value="${redis_hostname}"/>
- <property name="port" value="${redis_port}"/>
- <property name="password" value="${redis_pwd}" />
- <property name="timeout" value="3000"/>
- <property name="usePool" value="true"/>
- <property name="poolConfig" ref="jedisPoolConfig"/>
- </bean>
web.xml 添加拦截器:
- <filter>
- <filter-name>springSessionRepositoryFilter</filter-name>
- <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>springSessionRepositoryFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- 3 使用 spring-session
- 只要使用标准的 servlet api 调用 session, 在底层就会通过 Spring Session 得到的, 并且会存储到 Redis 或其他你所选择的数据源中
- 这里是我写的一个 demo:
- /**
- * @author fengzp
- * @date 17/2/23 下午 3:19
- */
- @Controller
- @RequestMapping(value = "index")
- public class IndexController {
- private final Gson gson = new GsonBuilder().setDateFormat("yyyyMMddHHmmss").create();
- @RequestMapping(value = "login")
- public String login(HttpServletRequest request, String username){
- request.getSession().setAttribute("user", gson.toJson(new User(username,"123456")));
- return "login";
- }
- @RequestMapping(value = "index")
- public String index(HttpServletRequest request, Model model){
- User user = gson.fromJson(request.getSession().getAttribute("user").toString(), User.class);
- model.addAttribute("user", user);
- return "index";
- }
- }
- index.jsp:
第一个 tomcat
- <html>
- <body>
- <h2>Hello World!</h2>
- <p>${user.username}</p>
- </body>
- </html>
第二个 tomcat
- <html>
- <body>
- <h2>Hello World! i am the second!</h2>
- <p>${user.username}</p>
- </body>
- </html>
测试
这里利用上一篇 nginx 负载配置的两个 tomcat 来测试
首先访问 http://192.168.99.100/feng/index/login.htm?username=nginx 来触发生成 session
查看 redis, 发现 session 已经保存到 redis
访问 http://192.168.99.100/feng/index/index.htm 来读取 session, 并刷新多次
来源: http://www.phperz.com/article/18/0309/357200.html