基于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(不同的应用有不同的配置,这样配置是符合我现在这个项目要求的)。

相关推荐
自由的疯4 分钟前
java 怎么判断事务有无提交成功
java·后端·架构
流星白龙21 分钟前
【Qt】3.认识 Qt Creator 界面
java·开发语言·qt
星期天要睡觉25 分钟前
计算机视觉(opencv)——人脸网格关键点检测
python·opencv·计算机视觉
用户83562907805127 分钟前
用Python轻松转换Excel表格为HTML格式
后端·python
机灵猫29 分钟前
深入理解 Java 类加载与垃圾回收机制:从原理到实践
java·开发语言
weixin_3077791330 分钟前
AWS Redshift 数据仓库完整配置与自动化管理指南
开发语言·数据仓库·python·云计算·aws
Sunsets_Red32 分钟前
差分操作正确性证明
java·c语言·c++·python·算法·c#
QZ_orz_freedom32 分钟前
学习笔记--文件上传
java·笔记·学习
焰火199935 分钟前
[Java][SpringBoot]集成Redis实现Session共享
java·redis
荣淘淘37 分钟前
互联网大厂Java求职面试全景实战解析(涵盖Spring Boot、微服务及云原生技术)
java·spring boot·redis·jwt·cloud native·microservices·interview