使用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

①從github上下載tomcat-redis-session-manager-版本 的源碼。
②編譯源碼
使用命令行切換到源碼目錄,使用命令gradle build編譯。
具體步驟請參考博客:http://blog.csdn.net/wanglipo/article/details/51669526

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>

現在可以進行測試了。啓動redis,啓動tomcat1和tomcat2。分別訪問http://localhost:8082/www/index.jsphttp://localhost:8083/www/index.jsp
訪問後瀏覽器結果如下:
這裏寫圖片描述
這裏寫圖片描述

測試結果說明:
很顯然,這兩個瀏覽器輸出來自不同的tomcat。但是其sessionID卻是一樣的,說明session共享成功。

最後使用redis客戶端查看一下保存進redis的內容:
這裏寫圖片描述
說明使用redis來管理session時,將sessionID作爲key保存在了redis。key的值發現是亂碼,發現還有個TTL,自然就是過期時間了(刷新一下,該值在減小)。

再使用redis自帶的客戶端打開瞧瞧key的值,發現了熟悉的字樣,出現了jar包目錄相關的字符串,還有SessionSerialization(session序列化)。
這裏寫圖片描述

到此,使用redis來管理session的測試結束。當然了,我們還可以加個nginx來將請求分發到tomcat1和tomcat2,訪問時就不需要用兩個瀏覽器窗口來測試了,具體過程也不會太複雜,可以參考下面的博客。

文中用到的資源下載:context.xml、index.jsp和三個jar包

參考博客:基於nginx tomcat redis分佈式web應用的session共享配置

相關問題:
使用tomcat-redis-session-manager 有沒有弊端?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章