欢迎关注我的个人博客和公众号,第一时间发布最新的干货文章
个人博客网站:www.spacedong.top
微信公众号:spacedong
传统的解决方案
在传统的 HTTP session 解决方案中,session 是存储在 JVM 的堆内存中。这个 JVM 和运行代码的 JVM 是一样的。
- 优点:
- 可以快速部署在多个服务器实例中。
- 动态地增加或者减少服务器的实例。
- 缺点:
- 在动态增加或者减少了服务器实例后,需要 HTTP session 重新平衡。这里会消耗大量的资源。
- 存储 HTTP session 的时候,需要消耗大量的堆内存,会给 GC 时带来性能瓶颈。
现在的解决方案
为了解决在传统的 HTTP session 管理方案中的问题,需要把 session 存储在独立的数据结构中,如:Redis、Memcache等缓存中,让 session 实现共享。
实践
- 准备Spring - session
- 准备Redis
- 准备Nginx
准备 Spring - session
1、第一步:添加依赖包
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
复制代码
2、第二步: web.xml 文件中添加 session 过滤器
<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-redis 的配置文件,根据自己的配置来具体设置。
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" />
<bean id="redisHttpSessionConfiguration"
class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<property name="maxInactiveIntervalInSeconds" value="3600" />
</bean>
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
destroy-method="destroy">
//redis的主机名
<property name="hostName" value="${redis.host}" />
//redis的连接端口
<property name="port" value="${redis.port}" />
//连接超时时间
<property name="timeout" value="${redis.timeout}" />
<property name="usePool" value="true" />
<property name="poolConfig" ref="jedisPoolConfig" />
//这里是redis中的数据库的设置,默认是存在第一个库中
<property name="database" value="0"/>
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
</bean>
复制代码
4、第四步:在 Spring.xml 的配置文件中设置
<!-- Redis的配置-->
<import resource="classpath:spring-redis.xml"/>
复制代码
现在就可以完成关于spring-session的共享了
想要获得更多的优质技术文章,可以关注下方的微信公众号 spacedong
为优质的文章而赞赏,这是为作者能持续输出的最大肯定!