Spring Session + Redis 实现Session的分布式存储
本章所述内容详情参考大神Blog:
http://blog.youkuaiyun.com/xiao__gui/article/details/52706243 ,
该博客详细记录操作过程,且博客有很多实用知识。
本篇文章不做详述也只是记录个人操作过程,以备后续所用。
为什么需要Spring Session?
在单台Tomcat应用中,通常使用session保存用户的会话数据。
在负载均衡的集群环境下,负载均衡可能将请求分发到不同的服务器上去,在这种情况,需要将有状态的session统一管理起来。
实现Session共享的方案很多,其中一种常用的就是使用Tomcat、Jetty等服务器提供的Session共享功能,将Session的内容统一存储在一个数据库(如MySQL)或缓存(如Redis)中.
本文主要介绍另一种实现Session共享的方案,不依赖于Servlet容器,而是Web应用代码层面的实现,直接在已有项目基础上加入spring Session框架,利用Redis集群做主从复制,利用redis数据库的最终一致性,将session信息存入redis中。
当应用服务器发现session不在本机内存的时候,就去redis数据库中查找,因为redis数据库是独立于应用服务器的数据库,所以可以做到session的共享和高可用。来实现Session统一存储在Redis中。
结构:
图片来源:(http://blog.youkuaiyun.com/a60782885/article/details/70244305)
配置详解
1. 启动Redis服务
首先安装好Redis,并启动。有关这方面内容参考上篇博文:http://blog.youkuaiyun.com/noaman_wgs/article/details/59501400
2. Maven配置
在MAVEN中加入所需要的依赖的包:
<!-- Jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- Spring Data Redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.3.RELEASE</version>
</dependency>
<!-- Spring Session -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.2.2.RELEASE</version>
</dependency>
<!-- Apache Commons Pool -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
3. 配置Filter: 过滤器使HttpSession不再发挥作用,而是通过过滤器使用redis直接操作Session。
在web.xml中加上如下代码,一般放在最首:
<filter>
<filter-name></