编程之路
首发于编程之路
分布式学习(4) ---- Spring Session + Redis实现分布式Session共享

分布式学习(4) ---- Spring Session + Redis实现分布式Session共享

单个服务器的应用,Tomcat会将Session保存在本机内存中,但一旦涉及到分布式应用,如何实现不同服务器间的Session共享问题呢?

目前比较主流的方式还是基于分布式缓存Memcached、redis实现,具体实现方式也有多种,像是:

  • memcached-session-manager
  • tomcat-redis-session-manager
  • Spring Session

区别就是前两种需要依靠Tomcat,而Spring Session并不依靠容器,可扩展性更强,所以本文先用Redis + Spring Session实现一遍。

放上Demo

1.添加pom

<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配置

<!-- 将session放入redis -->
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>

<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="localhost" />
    <property name="password" value="your-password" />
    <property name="port" value="6379" />
    <property name="database" value="10" />
</bean>

3.配置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>  

大功告成,是不是相当简单。第二步配置spring session + redis模板,第三步配置session过滤器,这样就把服务器中的session缓存到redis中了,实现了分布式session的共享。

最后,在servlet或者action里面添加一个session,再去redis中查看一下是否有这个session就好,这里暂不测试了。

spring session可以理解是替换了Servlet那一套会话管理,既不依赖容器,又不需要改动代码,并且是用了spring-data-redis那一套连接池,可以说是比较好的解决方案。

这里spring-session要求Redis Server版本不低于2.8。

编辑于 2017-02-07

文章被以下专栏收录