使用tomcat-redis-session-manager實現session共享
測試環境:
- | Version | ip | Port |
---|---|---|---|
nginx(可選) | |||
jdk | 1.7.0_79 | ||
tomcat1 | 7.0.70 | 127.0.0.1 | 8082 |
tomcat2 | 7.0.70 | 127.0.0.1 | 8083 |
redis | 2.8.9 | 127.0.0.1 | 6379 |
1.獲得tomcat-redis-session-manager.jar
2.拷貝jar包到tomcat的lib目錄下
tomcat-redis-session-manager.jar
commons-pool2.jar
jedis.jar
將以上3個jar包拷貝到tomcat/lib下面。
3.在Tomcat中配置redis session管理器
在tomcat目錄/conf/context.xml中配置如下(有幾個tomcat參與管理session就要都配置)
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port="6379"
database="0" <!-- optional: defaults to "0" -->
maxInactiveInterval="60" <!-- optional: defaults to "60" (in seconds) --> />
注意:上面的配置要注意路徑。
因為github上最新版已經將tomcat6和7,jdk6和7都相容了,而以前則是分成不同工程。因此兩者使用了不同的名稱。
新版本使用的是com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve
舊版本使用的是com.radiadesign.catalina.session.RedisSessionHandlerValve
【如果使用的話,直接使用新版本即可】
4.測試
注意:
因為是在同一臺pc上部署的兩個tomcat,所以需要將tomcat埠改成不一樣的。
Tomcat1:
<Server port="8025" shutdown="SHUTDOWN">
<Connector connectionTimeout="20000" port="8082" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8029" protocol="AJP/1.3" redirectPort="8443"/>
Tomcat2:
<Server port="8035" shutdown="SHUTDOWN">
<Connector connectionTimeout="20000" port="8083" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8039" protocol="AJP/1.3" redirectPort="8443"/>
在兩個tomcat中部署專案,這裡簡單處理如下。
在tomcat1的webapps下新建www目錄,並在www下新建index.jsp檔案。
檔案內容如下:(如果是tomcat2則將”TomcatA”改為”TomcatB”)
<%@ pagelanguage="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<%
out.println("This is TomcatA");
%>
<br>
sessionID:<%=session.getId()%>
<br>
SessionIP:<%=request.getServerName()%>
<br>
SessionPort:<%=request.getServerPort()%>
</body>
</html>
測試結果說明:
很顯然,這兩個瀏覽器輸出來自不同的tomcat。但是其sessionID卻是一樣的,說明session共享成功。
最後使用redis客戶端檢視一下儲存進redis的內容:
說明使用redis來管理session時,將sessionID作為key儲存在了redis。key的值發現是亂碼,發現還有個TTL,自然就是過期時間了(重新整理一下,該值在減小)。
再使用redis自帶的客戶端開啟瞧瞧key的值,發現了熟悉的字樣,出現了jar包目錄相關的字串,還有SessionSerialization(session序列化)。
到此,使用redis來管理session的測試結束。當然了,我們還可以加個nginx來將請求分發到tomcat1和tomcat2,訪問時就不需要用兩個瀏覽器視窗來測試了,具體過程也不會太複雜,可以參考下面的部落格。