• 在Apache Tomcat 7设置redis作为session store


    在Apache Tomcat 7设置redis作为session store

     //输出tomcat控制台日志

    root@ubuntu:~# cd /usr/tomcat/apache-tomcat-7.0.47
    root@ubuntu:/usr/tomcat/apache-tomcat-7.0.47# tail -f logs/catalina.out

     
     
     
    一般在部署Tomcat后,运行久了,catalina.out文件会越来越大,对系统的稳定造成了一定的影响。 
    可通过修改conf/logging.properties日志配置文件来屏蔽掉这部分的日志信息。 

    1catalina.org.apache.juli.FileHandler.level = WARNING 
    1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 
    1catalina.org.apache.juli.FileHandler.prefix = catalina. 

    将level级别设置成WARNING就可以大量减少日志的输出,当然也可以设置成OFF,直接禁用掉。 

    一般日志的级别有: 
    SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value) 
     
     

    在Apache Tomcat 7设置redis作为session store

    redis已经有组件支持直接在tomcat7中设置下将redis作为tomcat默认的session存储器,下面介绍下配置过程

    1.从http://redis.io/下载redis,按照redis服务端

      wget http://download.redis.io/redis-stable.tar.gz

      tar xvzf redis-stable.tar.gz

      cd redis-stable

      make

      

    2.启动redis

      cd RedisDirectory/src

      ./redis-server --port 6379

      

    3.从http://tomcat.apache.org/download-70.cgi下载tomcat7,按照tomcat7

    4.从https://github.com/xetorthio/jedis/downloads下载jedis作为java的redis客户端,

    从https://github.com/jcoleman/tomcat-redis-session-manager/downloads下载tomcat的redis session manager插件,

    从http://commons.apache.org/proper/commons-pool/download_pool.cgi下载apache的common pool包,

    将这几个jar包拷贝到tomcat7的lib目录下

    其实这里是有坑的,不过你们比较幸运,我帮你先踩了。如果你全部下载最新版本的话,肯定启动不起来。我试了很久才匹配这些jar的版本。在附件中可以下载。声明一下我用jdk是1.7的

    5.修改tomcat的conf下的context.xml文件,添加或者修改下面的配置

    Java代码  收藏代码
    1. <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />  
    2. <Manager className="com.radiadesign.catalina.session.RedisSessionManager"  
    3. host="localhost" <!-- optional: defaults to "localhost" -->  
    4. port="6379" <!-- optional: defaults to "6379" -->  
    5. database="0" <!-- optional: defaults to "0" -->  
    6. maxInactiveInterval="60" <!-- optional: defaults to "60" (in seconds) --> />  

      

    6.重启tomcat后就可以看到session存储到redis上了。

    ------------------------------------------------------------------------------------------------

    Possible Issues

    There is the possibility of a race condition that would cause seeming invisibility of the session immediately after your web application logs in a user: if the response has finished streaming and the client requests a new page before the valve has been able to complete saving the session into Redis, then the new request will not see the session.

    This condition will be detected by the session manager and a java.lang.IllegalStateException with the message Race condition encountered: attempted to load session[SESSION_ID] which has been created but not yet serialized.will be thrown.

    Normally this should be incredibly unlikely (insert joke about programmers and "this should never happen" statements here) since the connection to save the session into Redis is almost guaranteed to be faster than the latency between a client receiving the response, processing it, and starting a new request.

    If you encounter errors, then you can force save the session early (before sending a response to the client) then you can retrieve the current session, and call currentSession.manager.save(currentSession) to synchronously eliminate the race condition. Note: this will only work directly if your application has the actual session object directly exposed. Many frameworks (and often even Tomcat) will expose the session in their own wrapper HttpSession implementing class. You may be able to dig through these layers to expose the actual underlying RedisSession instance--if so, then using that instance will allow you to implement the workaround.

  • 相关阅读:
    字典树(Trie)的学习笔记
    kmp学习笔记
    NOIP PJ游记
    Hash学习笔记
    神奇的差分法(内附树状数组的一点扩展)
    DLX算法一览
    A*与IDA*的奇妙之旅
    HDU_2553——n皇后问题,作弊
    HDU_2035——求A^B的最后三位数
    HDU_2034——集合A-B
  • 原文地址:https://www.cnblogs.com/fx2008/p/4136055.html
Copyright © 2020-2023  润新知