一、前言
本文主要測試memcached實現session共享的實現方式,不討論如何讓nginx參與實現負載均衡等。
二、環境配置
本測試在Window下進行
name | version | port |
Tomcat1 | 7.0.61 | 127.0.0.1:8083 |
Tomcat2 | 7.0.61 | 127.0.0.1:8084 |
Memcached | 1.4.2 | 127.0.0.1:11211 |
-
三、配置memcached-session-manager
3.1 獲取jar包
首先需要Session管理相關的包
memcached-session-manager-1.9.2.jar
memcached-session-manager-tc7-1.9.2.jar
因為用到memcached,所以還需要
spymemcached-2.10.3.jar
序列化(只測試了兩種方式,二選一即可)
kryo序列化方案(都說kryo序列化效率高)
asm-5.0.4.jar
kryo-3.0.3.jar
kryo-serializers-0.34.jar
minlog-1.3.0.jar
msm-kryo-serializer-1.9.2.jar
objenesis-1.2.jar
reflectasm-1.11.1.jar
javolution序列化方案
javolution-5.4.3.1.jar
msm-javolution-serializer-1.9.2.jar
msm-javolution-serializer-cglib-1.3.0.jar
msm-javolution-serializer-jodatime-1.3.0.jar
打包下載:
memcached-session-manager-1.9.2_By_kryo-serializer.rar
memcached-session-manager-1.9.2_By_javolution-serializer.rar
3.2 導入Jar包
把以上生成的jar放入tomcat的lib目錄下,打開Context.xml,
如果采用javolution序列化方式,添加如下代碼:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:localhost:11211" lockingMode="auto" sticky="false" requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$" sessionBackupAsync= "false" sessionBackupTimeout= "100" copyCollectionsForSerialization="true" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" />
如果采用的是kryo序列化方式,添加如下代碼:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:localhost:11211" lockingMode="auto" sticky="false" requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$" sessionBackupAsync= "false" sessionBackupTimeout= "100" copyCollectionsForSerialization="true" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
3.3 測試結果
依次啟動memcached,tomcat1,tomcat2
在瀏覽器中分別打開:
http://localhost:8083/examples/servlets/servlet/SessionExample
Session ID: 8BB1C837F4423CE4C4F1393D14C110C5-n1
http://localhost:8084/examples/servlets/servlet/SessionExample
Session ID: 8BB1C837F4423CE4C4F1393D14C110C5-n1
cmd進入命令提示符,輸入
telnet 127.0.0.1 11211
連接memcached主機,輸入
stats items
列出存入的數據列表
輸入 state cachedump 5 0 查看key值
發現,三處SessionID是一致的。
參考:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
相關系列: