memcached实现session共享问题总结

多台服务器分布式集群导至前后台交互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可以处理)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值