Tomcat Session 持久化

Session的主要數據被存儲在服務器內存中,而服務器會爲每一個在線用戶建立一個Session對象,當在線用戶不少時,例如同時有幾萬或是幾十萬在線的狀況下,Session內存的開銷將會十分巨大,會影響Web服務器性能。而Session的鈍化機制恰好可解決此問題。Session鈍化機制的本質就在於把服務器中不常常使用的Session對象暫時序列化到系統文件系統或是數據庫系統中,當被使用時反序列化到內存中,整個過程由服務器自動完成。java

實現:mysql

         要完成session持久化,存放在session裏的對象必需要實現java.io.Serializable 接口。web

         Tomcat經過兩個session管理類實現session持久化,StandardManager (默認)PersistentManagersql

StandardManager不使用任何的Store,Tomcat正常關閉,重啓或Web應用從新加載時,它會將內存中的session序列化到Tomcat目錄下數據庫

/work/Catalina/host_name/webappname/SESSIONS.ser文件中。當Tomcat重啓或應用加載完成後,tomcat會將文件中的session從新還原到內存中。apache

注:若是忽然終止該服務器,則全部會話都將喪失,由於StandardManager沒有機會實現存盤處理。tomcat

PersistentManager: 經過使用Store,將內存中的session備份到文件或數據庫中。當備份一個session對象時,該session對象會被複制到存儲器中,而原對象仍然留在內存中。所以若是服務器崩潰,就能夠從存儲器中獲取活動的session對象。當session被換出時,他會被移動到存儲器中,由於當前活動的session對象超過了上限值,或者session對象閒置了過長時間。換出session節省內存空間。服務器

配置:session

Tomcat默認是已經啓用持久化配置,若要禁用持久化功能,則只須要在<Context>節點裏配置app

<Manager pathname="" />

         持久化配置可進行全局配置和針對某一站點進行配置。全局配置須要在cof文件夾context.xml

<Context>節點中配置<Manager>,若要針對某一站點配置則須要在cof文件夾server.xml<Host><Context>

節點中添加<Manager>配置。

StandardManager

<Manager

className=」org.apache.catalina.session.StandardManager」 

debug=」0」

maxInactiveInterval=」-1″

/>

PersistentManager:

方式1

<Manager

className="org.apache.catalina.session.PersistentManager"

saveOnRestart="true"

maxActiveSession="-1"

minIdleSwap="0"

maxIdleSwap="30"

maxIdleBackup="0"

<Store

className="org.apache.catalina.session.FileStore"

checkInterval=」60」

directory="../session"/>

</Manager>

方式2

和方式1的區別:

<Store 

calssName="org.apache.catalina.JDBCStore"

driverName="com.mysql.jdbc.Driver" 
connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password=" 
sessionTable="tomcat_session" 

sessionIdCol="session_id" 

sessionDataCol="session_data" 
sessionValidCol="session_valid" 

sessionMaxInactiveCol="max_inactive" 
sessionLastAccessedCol="last_access"

sessionAppCol="app_name" 

checkInterval="60" 

debug="99" />

參數說明:

maxActiveSessions-可處於活動狀態的session數,default -1 不限制

checkInterval 檢查session是否過時的時間間隔,default 60s

saveOnRestart-服務器關閉時,是否將全部的session保存到文件中;
minIdleSwap/maxIdleSwap
session處於不活動狀態最短/長時間(s)sesson對象轉移到File Store中;(1表示沒有限制)
maxIdleBackup
超過這一時間,將session備份。(1表示沒有限制)

directory-文件存儲位置work\Catalina\host name\web app\session\文件名.session

相關文章
相關標籤/搜索