在Apache Tomcat 7设置redis作为session store
在Apache Tomcat 7设置redis作为session store
root@ubuntu:~# cd /usr/tomcat/apache-tomcat-7.0.47
root@ubuntu:/usr/tomcat/apache-tomcat-7.0.47# tail -f logs/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文件,添加或者修改下面的配置
- <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.
- jar.zip (181.3 KB)
在Apache Tomcat 7设置redis作为session store的更多相关文章
- Nginx+tomcat集群redis共享session应用方案
部署环境 主机 软件版本 192.168.88.1 nginx-1.12.2+redis-3.2.11 192.168.88.2 apache-tomcat-7.0.79 + jdk1.8 192.1 ...
- nginx+tomcat集群+redis(memcache)session共享!
常用保持session的方式: 1.一些代理(比如nginxIP_hash) 1.使用数据库来存储Session 2.使用Cookie来存储Session ...
- Apache + Tomcat + mod_jk实现集群服务及session共享
实现效果:用apache 分发请求到tomcat中的对应的项目 原理:
- spring-session+Redis实现Session共享
关于session共享的方式有多种: (1)通过nginx的ip_hash,根据ip将请求分配到对应的服务器 (2)基于关系型数据库存储 (3)基于cookie存储 (4)服务器内置的session复 ...
- nginx反向代理做负载均衡以及使用redis实现session共享配置详解
1.为什么要用nginx做负载均衡? 首先我们要知道用单机tomcat做的网站,比较理想的状态下能够承受的并发访问在150到200, 按照并发访问量占总用户数的5%到10%技术,单点tomcat的用户 ...
- nginx+tomcat负载均衡+动静分离+redis集中管理session
1.服务器A安装ng,服务器B.C安装tomcat: 2.服务器A建立/data/www目录,用于发布静态文件: 3.ng无动静分离配置: user root root; worker_process ...
- linux下实现redis共享session的tomcat集群
为了实现主域名与子域名的下不同的产品间一次登录,到处访问的效果,因此采用rediss实现tomcat的集群效果.基于redis能够异步讲缓存内容固化到磁盘上,从而当服务器意外重启后,仍然能够让sess ...
- 分布式Session共享(一):tomcat+redis实现session共享
一.前言 本文主要测试redis实现session共享的实现方式,不讨论如何让nginx参与实现负载均衡等. 二.环境配置 本测试在Window下进行 name version port Tomcat ...
- Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享
小伙伴们好久不见!最近略忙,博客写的有点少,嗯,要加把劲.OK,今天给大家带来一个JavaWeb中常用的架构搭建,即Nginx+Tomcat搭建服务集群,然后通过Spring Session+Redi ...
随机推荐
- easyui源码翻译1.32--Tabs(选项卡)
前言 使用$.fn.tabs.defaults重写默认值对象.下载该插件翻译源码 选项卡显示一批面板.但在同一个时间只会显示一个面板.每个选项卡面板都有头标题和一些小的按钮工具菜单,包括关闭按钮和其他 ...
- ANDROID_MARS学习笔记_S02_009_Animation_Interpolator
public class MainActivity extends Activity { private Button button = null; private ImageView imageVi ...
- Linux内存初始化
start_kernel -> setup_arch 在这个函数中我们主要看这几个函数. machine_specific_memory_setup max_low_pfn = setup_me ...
- Oracle Form Developer: Folder FRM-99999 Error 14212
Question: 做FOLDER文件夹功能,打开FORM错误提示: FRM-99999:出现1412错误.有关该错误的详细信息,请参阅发行说明文件(relnotes) Answer: 原因是FOLD ...
- scp传入固件,sysupgrade xx.bin升级固件
scp传入固件,sysupgrade xx.bin升级固件
- [HDU 1011] Starship Troopers
Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- [Android] An internal error occurred during: "Launching New_configuration". Path for project must have only one segment.
出错: An internal error occurred during: "Launching New_configuration". Path for project mus ...
- JAVA与.NET的相互调用——通过Web服务实现相互调用
JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...
- [liu yanling]测试流程
测试流程 1.制定测试计划 2.编辑测试用例 3.执行测试用例 4.发现并提交BUG 5.开发组修正BUG 6.对已修正BUG进行返测 7.修正完成的BUG将状态置为已关闭,未正确修正的BUG重新激活
- Code First to an Existing Database
Code First to an Existing Database https://msdn.microsoft.com/en-us/data/jj200620 https://weblogs.as ...