使用Redis存储Nginx+Tomcat负载均衡集群的Session

释放双眼,带上耳机,听听看~!

tomcat-redis-session-manager开源项目的使用

1、开源项目地址:https://github.com/jcoleman/tomcat-redis-session-manager

2、下载代码之后需要进行重新编译,生成所需要的jar,任意创建maven项目,将src下的代码拷贝到具体位置,如下:

使用Redis存储Nginx+Tomcat负载均衡集群的Session

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

如果不设置密码会报错,如下:

使用Redis存储Nginx+Tomcat负载均衡集群的Session

总结

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

使用Redis存储Nginx+Tomcat负载均衡集群的Session

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/

给TA打赏
共{{data.count}}人
人已打赏
安全经验

英文站如何做Google Adsense

2021-10-11 16:36:11

安全经验

安全咨询服务

2022-1-12 14:11:49

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索