在Apache Tomcat 7设置redis作为session store
2014-12-01 21:39
295 查看
在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代码
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost" <!-- optional: defaults to "localhost" -->
port="6379" <!-- optional: defaults to "6379" -->
database="0" <!-- optional: defaults to "0" -->
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.
相关文章推荐
- 在Apache Tomcat 7设置redis作为session store
- 在Apache Tomcat 7设置redis作为session store
- spring-boot整合redis作为缓存(1)——redis的设置
- 设置 java.library.path其实是在 Apache Tomcat 的任务栏 Icon中设置
- 如果使用Ext.form.ComboBox 作为editor,并设置了store,在选择后,在表格单元中显示的是store中的displayfield 而不是valuefield
- winrar 强制将当前路径作为临时解压目录的设置
- 设置本机作为数据库服务器
- 用SQL Server 2005作为JobStore的Quartz.Net的设置
- Apache Tomcat 服务器的设置
- ie chrome同时设置空白页作为默认页的冲突
- 使用Java Service Wrapper设置tomcat作为linux服务并且开机自动启动
- vi在修改汉字的时候,把汉字作为一个字符处理的设置办法
- Apache Tomcat NIO设置
- 终于搞定使用node.js +redis 作为服务端,提供图片上传存储服务
- 当需要将TextBox控件作为密码输入框时,应该将控件的什么属性设置为Password???
- 【VS Shell Integrated】在VS.Net 2008 IDE中如何设置直接弹出的WPF窗体的Owner(对<在VS.Net 2008 IDE中直接使用WPF窗体作为弹出窗体>的补充
- 地磅称量系统之(24~26)创建一个名称为WinApp的Windows应用程序作为启动项目并且设置主界面上控件的属性
- redis常用操作、 redis操作键值、 redis安全设置
- silverlight之How To:设置ComboBox控件的数据源当ComboBox用来作为DataGrid的某列的编辑控件时
- VMWARE 中安装 RHEL5 作为交叉编译环境的几点设置