利用Memcached来保存Tomcat的session会话

网上有大量的文章有写memcached在tomcat的设置方法,基本上都从一个文章里转的,把内容都搞乱了。

为此,写一篇记录一下。本文的主要目的是修正一下,部分网上有误的地方。

前提条件:

1、memcached正常工作了

2、tomcat 正常工作了。

1、安装方法及安装包

javolution-5.4.3.1.jar

memcached-2.4.2.jar

memcached-session-manager-1.3.0.jar

msm-javolution-serializer-cglib-1.3.0.jar

msm-javolution-serializer-jodatime-1.3.0.jar

安装方法:  将这几个包放到/usr/local/tomcat6.0/lib里。

2、编辑tomcat的配置文件。 这一点很重要,因为网上大多数文章都是说修改server.xml里配置;我试过但最终发现session的信息没有存入到memcache中,我意识到这可能是配置有问题。目前发现编辑context.xml这个文件,是可以立即将session丢入到memcache中的。>

# vim /usr/local/tomcat6.0/conf/context.xml

<Context>  <!-- 在这个字段下添加以下内容,在节点入请填入你的memcached服务器ip及端口号-->                  <Manager className="de.Javakaffee.web.msm.MemcachedBackupSessionManager"                            memcachedNodes="n1:10.254.41.197:11211"                            requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"                            sessionBackupAsync="false"                            sessionBackupTimeout="100"                            transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"                            copyCollectionsForSerialization="false" />  </Context> 

3、如何测试? 

我目前的测试方法是,通过apache的mod_jk来实现负载均衡(之前的文章里有写),并且启用tomcat之间的会话复制。

这样的结果就是,seesion ID会随着每次用户的提交而变换节点,但ID不变。

例如:

ID CFC1ACAC6B0B8C27BEA76919F3A99BF8-n1.tomcat2 

下次提交就会变成: 节点切换了,但是ID不变>

ID CFC1ACAC6B0B8C27BEA76919F3A99BF8-n1.tomcat1

结合memcache的状态: 我之前在会话没有成功的丢到memcached这里时,cmd_set 为0 >

# perl memcached-tool.pl 10.254.41.197:11211 stats                   cmd_get          27                   cmd_set          15                   get_hits           12  # perl memcached-tool.pl 10.254.41.197:11211 stats                   cmd_get          31                   cmd_set          17        get_hits           14 

我想通过以上的判断,配置 是成功的!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e3053b37a380435c15ba769d17c57a6f.html