Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 424|回复: 0

Tomcat中session共享问题的简单解决办法

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-5-27 09:32:46 | 显示全部楼层 |阅读模式

    tomcat-redis-session-manager

    使用redis配置tomcat共享session

    结构图:

    分析:

    分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,
    比如 tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案,
    本文主要介绍了使用 redis 服务器进行 session 统一存储管理的共享方案。
    

    必要环境:

    • java1.7
    • tomcat7
    • redis2.8

    nginx 负载均衡配置

    1. 修改nginx conf配置文件加入

       upstream tomcat {
           server 200.10.10.67:8110;
           server 200.10.10.67:8120;
           server 200.10.10.44:8110;
           server 200.10.10.66:8110;
       }
      
    2. 配置 相应的server或者 location地址到 http://tomcat

    tomcat session共享配置步骤

    1. 添加redis session集群依赖的jar包到 TOMCAT_BASE/lib 目录下

    2. 修改 TOMCAT_BASE/conf 目录下的 context.xml 文件

       	<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
       	<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
            host="localhost"
            port="6379"
            database="0"
            maxInactiveInterval="60"
            sessionPersistPolicies="PERSIST_POLICY_1,PERSIST_POLICY_2,.."
            sentinelMaster="SentinelMasterName"
            sentinels="sentinel-host-1:port,sentinel-host-2:port,.."/>
      

      属性解释:

      • host redis服务器地址

      • port redis服务器的端口号

      • database 要使用的redis数据库索引

      • maxInactiveInterval session最大空闲超时时间,如果不填则使用tomcat的超时时长,一般tomcat默认为1800 即半个小时

      • sessionPersistPolicies session保存策略,除了默认的策略还可以选择的策略有:

        [SAVE_ON_CHANGE]:每次 session.setAttribute() 、 session.removeAttribute() 触发都会保存. 
        	注意:此功能无法检测已经存在redis的特定属性的变化,
        	权衡:这种策略会略微降低会话的性能,任何改变都会保存到redis中.
        
        [ALWAYS_SAVE_AFTER_REQUEST]: 每一个request请求后都强制保存,无论是否检测到变化.
        	注意:对于更改一个已经存储在redis中的会话属性,该选项特别有用. 
        	权衡:如果不是所有的request请求都要求改变会话属性的话不推荐使用,因为会增加并发竞争的情况。
        
      • sentinelMaster redis集群主节点名称(Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求)

      • sentinels redis集群列表配置(类似zookeeper,通过多个Sentinel来提高系统的可用性)

      • connectionPoolMaxTotal

      • connectionPoolMaxIdle jedis最大能够保持idel状态的连接数

      • connectionPoolMinIdle 与connectionPoolMaxIdle相反

      • maxWaitMillis jedis池没有对象返回时,最大等待时间

      • minEvictableIdleTimeMillis

      • softMinEvictableIdleTimeMillis

      • numTestsPerEvictionRun

      • testOnCreate

      • testOnBorrow jedis调用borrowObject方法时,是否进行有效检查

      • testOnReturn jedis调用returnObject方法时,是否进行有效检查

      • testWhileIdle

      • timeBetweenEvictionRunsMillis

      • evictionPolicyClassName

      • blockWhenExhausted

      • jmxEnabled

      • jmxNameBase

      • jmxNamePrefix


    3. 重启tomcat,session存储即可生效

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-2 22:04 , Processed in 0.059615 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表