基于Java IO 序列化方案的memcached-session-manager多memcached节点配置

session的序列化方案官方推荐的有4种

  1. java serialization
  2. msm-kryo-serializer
  3. msm-javolution-serializer
  4. msm-xstream-serializer

关于这几种,官方也给出了比较:

  • Java serialization is very robust and a proven technology. The biggest disadvantage IMHO is that different class versions cannot be handled.
  • Kryo is an extremely fast binary serialization library. In the popular thrift-protobuf-compare benchmark it's one of the fastest serialization toolkits - and it differs from the fastest in that it does NOT need a schema definition of serialized data, which is a requirement for serialization arbitrary session data. A disadvantage of using kryo based serialization is that it's binary - you just cannot look how the serialized object graph looks like. This is my favorite serialization strategy, just because of its great performance.
  • Javolution is a very good and fast xml binding toolkit. The reflection part is written by me and adds the bits that are actually binding POJOs to xml. It is covered well with unit tests, however I cannot guarantee that there's no issue left to solve (actually this serialization strategy was in use in my own projects, now replaced by kryo based serialization).
  • XStream based serialization should be very robust as this is an often used java object binding library. The biggest disadvantage IMHO is the relatively bad performance.

要注意的是javolution是唯一支持copyCollectionsForSerialization="true"时对能对线程不安全的collection进行序列化特性的,其他的方案要对序列化线程不安全的collection时特别处理,性能最好的序列化方案是Kryo。

网上有一些例子都是关于Javolution的,我个人倾向于使用Kryo,至于序列化出现的问题还可以自己解决,不过先使用java IO来配置,先用起来,以后再慢慢优化,换成Kryo。

直接在CATALINAHOME/lib/下添加memcached−2.5.jar和memcached−session−manager−1.4.0.jar ,然后对CATALINA_HOME/conf/server.xml修改相应的配置

   <Context path="/webapp" docBase="D:\webapp\WebRoot" reloadable="false">  
     <Manager   
        className= "de.javakaffee.web.msm.MemcachedBackupSessionManager"  
        memcachedNodes= "n1:192.168.112.1:11211,n2:192.168.112.2:11211"   
        sticky="false"   
        lockingMode="auto"   
        requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"    
        sessionBackupAsync= "false"   
        sessionBackupTimeout= "0"   
        memcachedProtocol="binary"  
        transcoderFactoryClass= "de.javakaffee.web.msm.JavaSerializationTranscoderFactory"    
     />  
   </Context>  

由于项目对session 管理模式是non-sticky的,所以不配置failoverNodes,任何一个web工程对session的修改要及时更新到memcache上,所以sessionBackupTimeout为0(不同的应用有不同的配置,这样配置是符合我现在这个项目要求的)。

相关推荐
南城花随雪。6 分钟前
Spring框架之装饰者模式 (Decorator Pattern)
java·开发语言·装饰器模式
编程、小哥哥10 分钟前
设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
java·设计模式·装饰器模式
虞书欣的617 分钟前
Python小游戏24——小恐龙躲避游戏
开发语言·python·游戏·小程序·pygame
FHYAAAX25 分钟前
【机器学习】任务十:从函数分析到机器学习应用与BP神经网络
开发语言·python
PyAIGCMaster34 分钟前
python环境中,敏感数据的存储与读取问题解决方案
服务器·前端·python
何曾参静谧1 小时前
「Py」模块篇 之 PyAutoGUI库自动化图形用户界面库
运维·python·自动化
pumpkin845141 小时前
客户端发送http请求进行流量控制
python·网络协议·http
smj2302_796826521 小时前
用枚举算法解决LeetCode第3348题最小可整除数位乘积II
python·算法·leetcode
hummhumm1 小时前
第 12 章 - Go语言 方法
java·开发语言·javascript·后端·python·sql·golang
hummhumm1 小时前
第 8 章 - Go语言 数组与切片
java·开发语言·javascript·python·sql·golang·database