您的位置:首页 > 数据库 > Memcache

memcached实现session共享问题总结

2015-11-02 17:16 537 查看
多台服务器分布式集群导至前后台交互session会有获取错乱问题,通过memcached服务器做为缓存服务器,即可解决相关问题,以下经过本人多次试验后成功实现session存储,总结如下:

一.环境

1. Linux 环境

2. Tomcat6.0 (4台)

3. memcached 一台(缓存1服务器:172.18.2.14,默认端口11211)

memcached 相关命令:

    1、检查进程

    ps -ef|grep memcached



注意:不同的tomcat版本(tomcat6,tomcat7)所需的包不一样,需要针对tomcat版本下载对应的包(之前试了多个版本,特别注意),截图中jar包本人已成功试用

     

1.这是采用的最新稳定版1.6.1,序列化方式使用的是kryo,注意版本要求与msm版本基本一致,建议统一采用最新稳定版,其中序列化方式是可选的。具体jar包见同文件夹下

有多种序列化方式,建议采用kryo序列化方式,效率更高。(之前试了javolution方式、java序列化方式都未成功,可能是jar包版本有问题)

二.配置

1. 将对应的jar包全部拷贝到tomcat的lib下(四台tomcat都需要)

2.修改每台tomcat的conf目录下得context.xml文件,在其中加入如下任意一段代码(注意:当使用多台tomcat时,一定要使用non-sticky模式)

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

 memcachedNodes="n1:172.18.2.14:11211"

 sticky="false"  

 lockingMode="auto"

 sessionBackupAsync="false"

 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

 sessionBackupTimeout="1000"

 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

sticky 可选项,默认为true。

指定使用粘性的还是非粘性的Session机制,这里使用的是非粘性。

lockingMode 可选项, 此属性只对非粘性Session有用,默认为none。

指定非粘性Session的锁定策略。他的只有

     (1)、none:从来不加锁

     (2)、all: 当请求时对Session锁定,直到请求结束

     (3)、auto:对只读的request不加锁,对非只读的request加锁

     (4)、uriPattern:<regexp>: 使用正则表达式来比较requestRUI + "?" + queryString来决定是否加锁,

sessionBackupAsync 可选项,默认true

  指定Session是否应该被异步保存到Memcached中。

  如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout

 

  设置的过期时间起作用。

sessionBackupTimeout  可选项,默认100

设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync="false"是起作用。默认100毫秒

注意:存入session的对象要序列化,存在memcached中的要在HTML展示的list也要序列化后才能读取(可以考虑改存json格式或者直

      接HTML格式试试,网上也有说用redis可以处理)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息