【電商】nginx+redis+tomcat實現session共用叢集

來源:互聯網
上載者:User

標籤:

本文記錄nginx+redis+tomcat實現session共用的過程

tomcat-redis-session-manager組件:https://github.com/jcoleman/tomcat-redis-session-manager

tomcat-redis-sessoin-manager對tomcat的支援:

(1) tomcat6:支援,要求jdk為1.6, 需要引入tomcat-redis-session-manager-1.2-tomcat-6.jar,不過現在已經處理不維護的狀態

(2) tomcat7:支援,jdk可以是1.6或1.7,需要引入tomcat-redis-session-manager-1.2-tomcat-7.jar; 如果引入的是tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar則僅支援JDK1.7

(3) tomcat8:目前不支援, 可以嘗試一下https://github.com/chexagon/redis-session-manager(未實際驗證)

組件下載:https://github.com/jcoleman/tomcat-redis-session-manager/downloads

 

使用組件版本

nginx:1.8.0

tomcat兩個:6.0.44 

redis:2.4.10

JDK:1.6.0_34

 

(1) 將下面所有依賴的這些jar包放在$TOMCAT_HOME/lib中:

jedis-2.0.0.jar  tomcat-redis-session-manager-1.2-tomcat-6.jar commons-pool-1.5.5.jar

(2) 兩個tomcat分別配置conf/context.xml,增加:

Xml代碼  
  1. <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />  
  2. <Manager className="com.radiadesign.catalina.session.RedisSessionManager"  
  3.          host="localhost"   
  4.          port="6379"  
  5.          database="0"   
  6.          maxInactiveInterval="60" />  
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /><Manager className="com.radiadesign.catalina.session.RedisSessionManager"         host="localhost"          port="6379"         database="0"          maxInactiveInterval="60" />

 

另外,分別配置兩個tomcat的HTTP監聽連接埠為6181和6182

(3) nginx配置:

   

Java代碼  
  1. upstream cluster_redis {    
  2.         server localhost:6181;    
  3.         server localhost:6182;    
  4.    }    
  5.    server {    
  6.        listen 6180;    
  7.        server_name localhost;    
  8.        location / {    
  9.          proxy_pass http://cluster_memcached;    
  10.        }    
  11.    }    
upstream cluster_redis {          server localhost:6181;          server localhost:6182;     }     server {         listen 6180;         server_name localhost;         location / {           proxy_pass http://cluster_memcached;         }     }  

 

 這裡配置nginx監聽連接埠為6180,並請所有的請求反向 Proxy到6181和6182的tomcat叢集.

 

(4) 測試代碼session.jsp:

Jsp代碼  
  1. <%@ page import="java.util.Enumeration" %>    
  2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>    
  3. <html>    
  4. <head>    
  5.     <title>session test</title>    
  6.   <%    
  7.     String key = request.getParameter("sessionKey");    
  8.     String value = request.getParameter("sessionValue");    
  9.     if(key != null && !"".equalsIgnoreCase(key.trim())) {    
  10.       session.setAttribute(key, value);    
  11.     }    
  12.   %>    
  13. </head>    
  14. <body>    
  15. <form action="session.jsp" method="post">    
  16. <input type="text" name="sessionKey" value="key1"><input type="text" name="sessionValue" value="value1">    
  17. <input type="submit" value="提交">    
  18. </form>    
  19. <h4>已經儲存的session--<%=session.getServletContext().getRealPath("/")%></h4>    
  20. <table>    
  21.   <tr>    
  22.   <th>key</th>    
  23.   <th>value</th>    
  24.   </tr>    
  25.   <%    
  26.   Enumeration<String> keys = session.getAttributeNames();    
  27.     while(keys.hasMoreElements()){    
  28.       String k = keys.nextElement();    
  29.       String v = (String)session.getAttribute(k);    
  30.       %>    
  31.   <tr>    
  32.     <td><%=k%></td>    
  33.     <td><%=v%></td>    
  34.   </tr>    
  35.   <%    
  36.     }    
  37.   %>    
  38. </table>    
  39. </body>    
  40. </html>    
<%@ page import="java.util.Enumeration" %>  <%@ page contentType="text/html;charset=UTF-8" language="java" %>  <html>  <head>      <title>session test</title>    <%      String key = request.getParameter("sessionKey");      String value = request.getParameter("sessionValue");      if(key != null && !"".equalsIgnoreCase(key.trim())) {        session.setAttribute(key, value);      }    %>  </head>  <body>  <form action="session.jsp" method="post">  <input type="text" name="sessionKey" value="key1"><input type="text" name="sessionValue" value="value1">  <input type="submit" value="提交">  </form>  <h4>已經儲存的session--<%=session.getServletContext().getRealPath("/")%></h4>  <table>    <tr>    <th>key</th>    <th>value</th>    </tr>    <%    Enumeration<String> keys = session.getAttributeNames();      while(keys.hasMoreElements()){        String k = keys.nextElement();        String v = (String)session.getAttribute(k);        %>    <tr>      <td><%=k%></td>      <td><%=v%></td>    </tr>    <%      }    %>  </table>  </body>  </html>  

 

 

需要注意的是,tomcat-redis-session-manager組件並不提供redis叢集的支援。對該問題,作者的解釋是推薦使用twitter的twemproxy或者碗豆莢的codis之類的redis代理服務。

java企業級通用許可權安全架構源碼 SpringMVC mybatis or hibernate+ehcache shiro druid bootstrap HTML5

【java架構源碼下載】

【電商】nginx+redis+tomcat實現session共用叢集

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.