• Nginx + Tomcat7 + redis session一致性问题


            Nginx 作负载均衡时,由于是每次都需要把请求分发到不同的机器,同一个用户在一台机器上创建了 session,下一次的请求很有可能会转发到另外一台机器,会造成 session 丢失。我们可以使用 Redis 来保存 session。具体步骤如下:

    1.  https://files.cnblogs.com/files/langfanyun/redislib.7z  下载解压后,把 jar 包都放在Tomcat 的 lib 目录下;

    2. 编辑 Tomcat下的 conf/context.xml 文件,加入如下配置:

        <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
        <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
            host="192.168.137.47"
            port="6379"
            database="0"
            maxInactiveInterval="60" />

       其中 host 为 Redis 的服务器地址。

    3. 修改 Tomcat 下的 conf/server.xml 文件,在 <Engine>节点添加 jvmRoute 属性,不同机器上的Tomcat 设置不同的值:

           <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">

    4. 修改 Tomcat 下的 webapps/ROOT/ 下的 index.jsp 文件,把<body>里的内容改成如下。不同机器上的此文件,添加一些不同的值,以区分不同的机器。

    <body>
            SessionID: <%=session.getId()%><br/>
            SessionIP: <%=request.getServerName()%><br>
            tomcat1
        </body>

    5. 启动 Redis 服务器和各个 Tomcat,访问时,多刷新几次,可以看到 sessionID 的值一样,但是其它内容不一样。说明实际上是访问了不同的 Tomcat 下的应用 。

  • 相关阅读:
    json转List、Map
    java复制文件的4种方式
    Java并发编程之CountDownLatch的用法
    SpringMVC整合ActiveMQ
    Spring AOP (事务管理)
    Spring AOP 的实现方式(以日志管理为例)
    Java设计模式之模板方法模式(Template Method)
    MongoDB简介
    线程池的实现原理
    ReentrantLock的底层实现机制 AQS
  • 原文地址:https://www.cnblogs.com/langfanyun/p/8502701.html
Copyright © 2020-2023  润新知