tomcat-redis-session-manager开源项目的使用
1、开源项目地址:https://github.com/jcoleman/tomcat-redis-session-manager
2、下载代码之后需要进行重新编译,生成所需要的jar,任意创建maven项目,将src下的代码拷贝到具体位置,如下:
maven的pom.xml文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <modelVersion>4.0.0</modelVersion>
6
7 <groupId>com.ufind.session</groupId>
8 <artifactId>tomcat-redis-session</artifactId>
9 <version>1.0-SNAPSHOT</version>
10
11 <dependencies>
12 <dependency>
13 <groupId>org.apache.tomcat</groupId>
14 <artifactId>tomcat-catalina</artifactId>
15 <version>7.0.27</version>
16 </dependency>
17 <dependency>
18 <groupId>redis.clients</groupId>
19 <artifactId>jedis</artifactId>
20 <version>2.7.2</version>
21 </dependency>
22 </dependencies>
23
24 <build>
25 <plugins>
26 <plugin>
27 <groupId>org.apache.maven.plugins</groupId>
28 <artifactId>maven-compiler-plugin</artifactId>
29 <version>3.0</version>
30 <configuration>
31 <source>1.7</source>
32 <target>1.7</target>
33 <encoding>UTF-8</encoding>
34 </configuration>
35 </plugin>
36 </plugins>
37 </build>
38
39</project>
40
3、然后打开terminal,执行mvn clean 和mvn install 将编译好的代码打包为:tomcat-redis-session-1.0-SNAPSHOT.jar
4、将tomcat-redis-session-1.0-SNAPSHOT.jar、jedis-2.7.2.jar、commons-pool2-2.0.jar 三个jar包分别放在tomcat1和tomcat2实例下的lib目录下。
免费下载这三个jar:http://download.csdn.net/detail/u010870518/9585716
5、修改tomcat实例下conf/contex.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1<?xml version='1.0' encoding='utf-8'?>
2<Context>
3 <WatchedResource>WEB-INF/web.xml</WatchedResource>
4
5 <!-- tomcat-redis-session共享配置 -->
6 <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
7 <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
8 host="192.168.1.149"
9 port="6379"
10 database="0"
11 maxInactiveInterval="60" />
12
13</Context>
14
如果Redis配置了访问权限,请添加密码为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 1<?xml version='1.0' encoding='utf-8'?>
2<Context>
3 <WatchedResource>WEB-INF/web.xml</WatchedResource>
4
5 <!-- tomcat-redis-session共享配置 -->
6 <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
7 <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
8 host="192.168.1.149"
9 port="6379"
10 database="0"
11 password="redispassword"
12 maxInactiveInterval="60" />
13
14</Context>
15
如果不设置密码会报错,如下:
总结
tomcat-redis-session-manager是一个对用户完全透明的分布式session存储框架,用户只需要在tomcat中进行简单的配置,就可以使用,我们的业务代码是完全和单实例的时候的代码是一样的的,也就是写代码的时候完全不用担心你写的是一个多tomcat实例的代码,完全透明。
如何对框架的原理进行简单的理解,我们首先要知道,在请求过程中的session操作,首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中。然后再从 request获取session的时候,如果存在sessionId那么就根据Id从session池中获取session,如果sessionId不存在或者session失效,那么则新建session并且将session信息放入session池,供下次使用。
如果我们想自己写一个类似于tomcat-redis-session-manager的项目,我们应该知道Tomcat的Session管理机制,在默认的情况下Tomcat的Session管理,如果不进行设置的话是由Tomcat自带的StandardManager类进行控制的,我们可以根据这个类自定义一个Manager,主要重写的就是org.apache.catalina.session.ManagerBase里边的具体写的操作,
这也是tomcat-redis-session-manager的基本原理,将tomcat的session存储位置指向了Redis
RedisSessionManager继承了org.apache.catalina.session.ManagerBase并重写了add、findSession、createEmptySession、remove等方法,并将对session的增删改查操作指向了对Redis数据存储的操作
有兴趣可参考一篇Tomcat中session的管理机制:http://www.cnblogs.com/interdrp/p/4935614.html
参考网址:http://blog.csdn.net/xlgen157387/article/details/52024139/