基於redis的Tomcat服務器session共享(單實例redis)

環境:tomcat7,redis3.2.10

關於redis的安裝以及配置請自行搜索。


在每個tomcat實例中都需要做如下修改。

需要的jar:

1.jedis-2.2.1.jar

2.commons-pool2-2.4.2.jar

3.redis-session-manager.jar(這個jar名稱是自定義的)

*關於這個jar請移步github,獲取源碼自行編譯,此處作者是用gradle構建,需要在OS安裝gradle。或者修改成其它構建工具。

將以上jar添加到tomcat目錄下的 /lib文件夾中

2.需要做的修改。

修改conf/context.xml文件,添加和修改如下內容:

   <!-- 這裏是禁用session本地持久化-->
    <Manager pathname="" />  

 <!-- 這個類是在redis-session-manager.jar這個包中 -->
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />   

<!-- 這個類是在redis-session-manager.jar這個包中,下面的屬性需要大家自行修改,host默認localhost,port默認6379 ,database默認0,maxInactiveInterval默認30*60單位是秒-,password默認是null,有密碼請自行添加,->
<Manager className="com.radiadesign.catalina.session.RedisSessionManager" 
    host="192.168.50.129" 
    port="6379" 
    database="0" 
    password="abc123" 
    maxInactiveInterval="60"/>

注意:maxInactiveInterval這個參數會根據tomcat版本的不同而失效,在7.0.68版本及以上此字段失效,應改爲sessionMaxAliveTime,如果是這個字段需要修改對應的redis-session-manager中的源碼,

將getMaxInactiveInterval()方法全部修改成getSessionMaxAliveTime()

另外這個session共享的jar包中jedis版本較低,無法使用ssl,如果需要使用需要在redis-session-manager.jar中自行更新jedis版本,並在jedis連接池生成處自行編碼。我是給RedisSessionManager類增加了一個標誌位字段,來做的,這樣方便在xml文件中配置。

其中還有sessionPersistPolicies,這個字段使用來確定session持久策略,值有三種default,save_on_change,always_save_after_request,可以使用逗號分隔來指定多種會話持久策略。

以下是測試:

此測試是使用了tomcat自帶的頁面進行測試的,默認安裝或者解壓後,在webapps下面會有相應的頁面;

默認的seesion失效是30*60秒,如果測試可以修改maxInactiveInterval(或者sessionMaxAliveTime)這個字段值,默認單位秒,或者修改tomcat根目錄下conf/web.xml文件,如果有web項目可以在web.xml中重新配置失效時間。(如果你的項目需要動態的session失效時間的話,需要修改共享jar包的源碼)



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