網上關於memcached-session-manager 說明的blog不少,今天實驗了,總結下。 javascript
MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 閥)對Request進行跟蹤。Request請求到來時,從memcached加載session,Request請求結束時,將tomcat session更新至memcached,以達到session共享之目的, 支持 sticky 和 non-sticky 模式。 css
黏性(sticky)session: java
非黏性( non-sticky)session: web
Sticky 模式: tomcat session 爲 主session, memcached 爲備 session。Request請求到來時, 從memcached加載備 session到 tomcat (僅當tomcat jvmroute發生變化時,不然直接取tomcat session);Request請求結束時,將tomcat session更新至memcached,以達到主備同步之目的。 正則表達式
Non-Sticky模式:tomcat session 爲 中轉session, memcached1 爲主 sessionmemcached 2 爲備session。Request請求到來時,從memcached 2加載備 session 到 tomcat,(當 容器 中仍是沒有session 則從memcached1加載主 session 到 tomcat, 這種狀況是隻有一個memcached節點,或者有memcached1 出錯時),Request請求結束時,將tomcat session更新至主memcached1和備memcached2,而且清除tomcat session 。以達到主備同步之目的。
tomcat
MSM 配置: session
參考地址http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration dom
http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration 異步
將以下jar放到tomcat lib下面 jvm
在tomcat conf context.xml中加入下面代碼
<Context> ... <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211" sticky="false" sessionBackupAsync="false" lockingMode="uriPattern:/path1|/path2" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> </Context>
Manager標籤屬性說明:
className 此屬性是必須的。
memcachedNodes 此屬性是必須的。這個屬性必須包含你全部運行的memcached節點。每一個節 點的定義格式爲<id>:<host>:<port>。 多個之間用空格或半角逗號隔開(如:memcachedNodes="n1:localhost:11211,n2:localhost:11212")。若是你設置單個memcache節點<id>是可選的,因此它容許設置爲<host>:<port>(memcachedNodes="localhost:11211")。
failoverNodes
可選項,屬性只能用在非粘連Session機制中。
此屬性必須包含memcached節點的Id,此節點是Tomcat做爲備份使用。多個之間用空格或逗號隔開
memcachedProtocol
可選項,默認爲text。出屬性指明memcached使用的存儲協議。只支持text或者binary。
sticky 可選項,默認爲true。
指定使用粘性的仍是非粘性的Session機制。
lockingMode 可選項, 此屬性只對非粘性Session有用,默認爲none。
指定非粘性Session的鎖定策略。他的只有
(1)、none:歷來不加鎖
(2)、all: 當請求時對Session鎖定,直到請求結束
(3)、auto:對只讀的request不加鎖,對非只讀的request加鎖
(4)、uriPattern:<regexp>: 使用正則表達式來比較requestRUI + "?" + queryString來決定是否加鎖,
requestUriIgnorePattern 可選項
此屬性是那些不能改備份Session的請求的正則表達式。若是像css,javascript,圖片等靜態文件被同一個Tomcat和同一個應用上下文來提供,這些
請求也會經過memcached-session-manager。可是這些請求在一個http會話中幾乎沒什麼改變,因此他們不必觸發Session備份。因此那些靜態文件
不必觸發Session備份,你就可使用此屬性定義。此屬性必須符合java regex正則規範。
sessionBackupAsync 可選項,默認true
指定Session是否應該被異步保存到Memcached中。 若是被設置爲true,backupThreadCount設置起做用,若是設置false,經過sessionBackupTimeout
設置的過時時間起做用。
backupThreadCount 可選項,默認爲CPU內核數。
用來異步保存Session的線程數(若是sessionBackupAsync="true")。
sessionBackupTimeout 可選項,默認100,單位毫秒
設置備份一個Session所用的時間,若是操做超過期間那麼保存失敗。此屬性只在sessionBackupAsync="false"是起做用。默認100毫秒
sessionAttributeFilter 可選項 從1.5.0版本有
此屬性是用來控制Session中的那個屬性值保存到Memcached中的正則表達式。鄭則表達式被用來匹配Session中屬性名稱。如
sessionAttributeFilter="^(userName|sessionHistory)$" 指定了只有"userName"和"sessionHistory"屬性保存到Memcached中。
依賴於選擇的序列化策略。
transcoderFactoryClass 可選,默認爲 de.javakaffee.web.msm.JavaSerializationTranscoderFactory
此屬性值是建立序列化和反序列化保存到Memcached中的Session的編碼轉換器的工廠類名。這個指定的類必須實現了de.javakaffee.web.msm.TranscoderFactory
和提供一個無參的構造方法。例如其餘的有效的實如今其餘packages/jars中提供如:msm-kryo-serializer,msm- xstrea-serializer和msm-javolution-serializer.
copyCollectionsForSerialization 可選項,默認false。
customConverter 可選項
enableStatistics 可選項,默認true
用來指定是否進行統計。
enabled 可選項,默認true
指定Session保存到Memcached中是否可用和是否能夠經過JMX進行改變。只用於粘性Session。
配置$CATALINA_HOME/conf/server.xml
注意每臺tomcat的jvmroute參數都不能同樣
返回sessionid :011F1CAEAF5AE925F4124D94785AFE41-n1 .tomcat2
n1 表示memcached ; .tomcat2表示配置jvmRoute。