tomcat集群下用redis做sesssion共享的那些坑

tomcat集群下用redis做sesssion共享的那些坑:



1,用到的三个需要放入${tomcat}/lib下的jar包:commons-pool-1.6.jar,tomcat-redis-session-manager.jar,jedis-1.5.2.jar,如果用到jedis2.0以上的,要自己去解决一下找不到类的错误,会用到commons-pool2的类,但是还是会去找低版本的,因时间仓促,没有具体是解决,都换成了低版本的。


2,更改${tomcat}/conf中的context.xml的<Context>标签中增加
    <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve"/> 
    <Manager className="com.radiadesign.catalina.session.RedisSessionManager" 
        host="localhost"  
        port="6379"  
        database="0"  
        maxInactiveInterval="60" />
    上面的是本地的单台redis,如果需要用到哨兵模式(Sentinel)配置如下:
    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
         maxInactiveInterval="1800"
         sentinelMaster="mymaster2"
         password="password" 
         sentinels="IP1:26389,IP2:26389" />
    PS:com.radiadesign.catalina.session 这个包名很多教程中都是错的(或许是版本的问题,很多写com.orangefunction.tomcat.redissessions),当时没注意,搞了好一会,所以使用时自己要查看清楚。


3,这个时候如果你是单纯在tomcat中测试是否可以,可以新增一个jsp的页面,在tomcat1中向session中setAttribute一个值,并在tomcat2中去get这个值,看是否可以取到,如果取到了说明tomcat这层的集群配置的没有问题了,网上很多的教程基本到这里就完结了,但在实际的web项目中,还有另外两个坑等着你,这是很多教程未提及的,这个时候如果你想把这个session用在你的web工程中,发现是根本不起作用的,因为在web项目中还需要这样配置:
1)在你的web.xml中加入<distributable/>这个标签,包含在</web-app>中即可,意思就是:实现session复制,分布式web容器应用。
2)这个坑不一定都会遇到,但是可以注意,就是这个时候的session是分布式的,所以要求其所setAttribute的对象一定要是可序列化的(PS:我所遇到的是项目中有人使用net.sf.json.JSONObject对象,而如果你去反编译就会发现这个json是没有序列化的,需要把这个json对象再toString一下即可,而String对象是实现了Serializable接口的)。


4,如果使用到Nginx的,相关的配置自己去更改,如:
    upstream examples {
        server localhost:8080;
        server localhost:8082;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.jsp index.htm;
         proxy_pass http://examples;
        }
    }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值