单点优化系列--session共享踩坑记

本文详述了在单机架构升级到集群过程中,如何利用Spring Session和Redis来实现Tomcat的Session共享,以解决停服一台Tomcat后用户需要重新登录的问题。文章介绍了基于lettuce和jedis两种方式的配置步骤,包括pom依赖、session共享的Spring配置以及web.xml的修改。还特别提到了配置多个JedisConnectionFactory可能导致的问题和解决方案。
摘要由CSDN通过智能技术生成

本文将继续单机架构升级集群系列博文, 记录tomcat的Session共享工作的记录,希望能帮助到需要的朋友们,也欢迎大牛们批评指正!!       

背景

        在博文( https://my.oschina.net/u/2342969/blog/995598 )中描述了本次架构升级的背景

        在博文( https://my.oschina.net/u/2342969/blog/1036702 )中记录了redis主从集群搭建

        在博文(https://my.oschina.net/u/2342969/blog/1162829 )中记录了 nginx+keepalived主从集群高可用搭建工作

        以上博文有需要的朋友们可以观阅

本文将记录 tomcat的Session共享工作, 在此参考了 spring官网文档(

http://docs.spring.io/spring-session/docs/1.3.1.RELEASE/reference/html5/#httpsession-redis-xml

)

概述

    基于以前博文可以了解到,现阶段,我们是一台nginx、2台tomcat       

    在我们未做session共享的情况下,使用的nginx的iphash策略,以致停掉一个tomcat_A,所有请求都会集中到另外一台tomcat_B 并需要重新登陆, tomcat_A启动后,已经请求道tomcat_B的请求量还是不会减少,

    做了session共享的应用,是基于 tomcat sessionmanager 做的,依赖tomcat版本,需要修改服务器配置,以致如需换应用服务器还需要重新搭建

    现优化方案,基于spring session,将session共享做到应用层,净化服务器配置,便于应用迁移。

环境准备

  •     centOs:6.5
  •    nginx : 1.5.8

  •    redis:版本任意(本文使用的2.8)

注意事项

  1.     spring session依赖spring mvc
  2.     本文基于redis实现session共享

基于lettuce完成

    pom依赖

    在maven项目pom.xml 增加以下依赖



<dependencies>
        <!-- ... -->

        <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-redis</artifactId>
                <version>1.3.1.RELEASE</version>
                <type>pom</type>
        </dependency>
        <dependency>
                <groupId>biz.paluch.redis</groupId>
                <artifactId>lettuce</artifactId>
                <version>3.5.0.Final</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>4.3.4.RELEASE</version>
        </dependency>
</dependencies>

    session共享spring配置

    在项目增加spring-session.xml

    目录如下: src/main/webapp/WEB-INF/spring/spring-session.xml

<context:annotation-config/> <!--开启注解配置-->

<!--springSession 配置-->
<bean id="sessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <!--修改session的有效时间 以秒为单位,默认值是1800,便于测试修改为60秒-->
        <property name="maxInactiveIntervalInSeconds" value="60"></property>
    </bean>

<!-- 如不使用P命名空间或者属性注入 默认redis ip为localhost,port为6379 -->
    <bean class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory" 
          p:hostName="12
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值