在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 ...
随机推荐
- 【 NOIP2015 DAY1 T2 信息传递】带权并查集
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- 环信_EaseUI 使用指南
EaseUI 使用指南 简介 EaseUI 封装了 IM 功能常用的控件(如聊天会话.会话列表.联系人列表).旨在帮助开发者快速集成环信 SDK. 源码地址: EaseUI:https://githu ...
- javascript小游戏--生命游戏
昨天参加Code Retreat的活动,"Code Retreat是一个一天的集中练习的活动,专注于软件开发和设计的基础". 要了解更多信息可前往 CodeRetreat官网 通过 ...
- Drawable(2)State list Drawable Resource介绍
State List A StateListDrawable is a drawable object defined in XML that uses a several different ima ...
- Import Items – Validation Multiple Languages Description
ð 提交标准请求创建和更新物料,因语言环境与处理次序方式等因素,造成物料中英(更多语言)描述和长描述混乱刷新. 症状: >>> Submit Standard Op ...
- Form 重置记录编号(app_record.for_all_record)
A block lines has item line_number. When a record is deleted, line_number must be renumbered. step 1 ...
- Oracle建表插数据等等
Oracle的表的管理: 表名和列的命名规则,详见 数据库命名规范 . 必须以字母开头 . 长度不能超过30个字符 . 不能使用Oracle的保留字 . 只能使用如下字符 column_name-Z, ...
- poj2817WordStack(状压)
链接 与上题类似 预处理一下各字符串之间最大的相同字符数就可以 注意dp要初始为负无穷 #include <iostream> #include<cstdio> #inclu ...
- BZOJ_3270_博物馆_(高斯消元+期望动态规划+矩阵)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3270 \(n\)个房间,刚开始两个人分别在\(a,b\),每分钟在第\(i\)个房间有\(p[ ...
- 6个可以隐藏运行bat,浏览器等程序的方法
在电脑启动时或者设置时间时运行指定的程序很容易实现.但是有时候还需要运行时不显示主界面,隐藏到后台运行.比如:开机时一段Bat批处理执行删除默认共享; 开机自动运行浏览器隐藏到后代打开指定网页等,希望 ...