Tomcat7基於Redis的Session共享實戰一


本文主要介紹如何使用redis對tomcat7的session進行托管。

1、安裝Redis
redis安裝比較簡單,此處略過。

2、配置兩個Tomcat
在本機上配置兩個Tomcat,分別為tomcat7-8081、tomcat7-8082。

編制兩個index.jsp頁面,分別放入tomcat7-8081\webapps\ROOT、tomcat7-8082\webapps\ROOT目錄下,index.jsp頁面內容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>獲取session id</title>
</head>
<body>
    Session Id : <%= request.getSession().getId() %>
</body>
</html>

tomcat7-8081訪問地址:http://localhost:8081,瀏覽顯示內容:Session Id : A86BC413D12339380DD7B0079C50D9EB
tomcat7-8082訪問地址:http://localhost:8082,瀏覽顯示內容:Session Id : A86BC413D12339380DD7B0079C50D9EB

備注:在同一台服務器上配置多個Tomcat教程

3、拷貝tomcat需要的jar
將如下幾個jar拷貝到${TOMCAT_HOME}/lib下

tomcat-redis-session-manager-VERSION.jar 
jedis-2.5.2.jar 
commons-pool2-2.2.jar

備注:jar已上傳到博客園中,有需要的點擊下載

4、配置tomcat
編輯${TOMCAT_HOME}/conf/context.xml,在context中加入

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
       host="localhost"
       port="6379"
       database="0"
       maxInactiveInterval="60" />

其中host和port為redis的ip和端口

至此配置完成,tomcat會使用redis來托管session。

5、測試
分別啟動2個Tomcat,在終端看到了如下信息,表明redis的session manager初始化成功。

...
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
信息: Attached to RedisSessionHandlerValve
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer
信息: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
信息: Will expire sessions after 1800 seconds
十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory E:\WorkFolder\Temp\Redis-Session\apache-tomcat1-8080\webapps\manag
十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory E:\WorkFolder\Temp\Redis-Session\apache-tomcat1-8080\webapps\ROOT
十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.TldConfig execute
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a co
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
信息: Attached to RedisSessionHandlerValve
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer
信息: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
信息: Will expire sessions after 1800 seconds
...

打開瀏覽器,輸入http://localhost:8081回車,
打開瀏覽器,輸入http://localhost:8082回車

獲取的SESSIONID是同一個,說明成功了,其中D5E4019A04709CD68F94378211DA1B60就是SESSIONID

啟動redis自身的客戶端:redis-cli.exe -h 127.0.0.1 -p 6379
執行"keys *",會看到SESSIONID:D5E4019A04709CD68F94378211DA1B60;
執行"get D5E4019A04709CD68F94378211DA1B60",得到SESSIONID的值。


經測試,只要redis不重啟,用戶session就不會丟失。雖然session保存到了redis中,但是如果redis掛掉,session也會丟失。為了解決此問題,可對redis進行集群。
注意:放到redis中的對象必須為可序列化對象。因此,在編程過程中,放置的session對象必須實現serialiable接口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM