session转移(使用Filter方式实现用Memcached储存Session)

这两天看到了帖子《扩展Tomcat 6.x,使用memcached存放session信息》,挺有意思,以前我也有采用Memcached管理Session的想法,就是一直没有实践,这两天就实践了一下,codeutil提供的采用扩展Tomcat的方式不错,不过我更喜欢用Resin,所以还是实现一个通用的模块吧,大家可以下载附件,里面有整个工程,如果要使用的话,参照web.xml,把Filter加入你自己的项目就可以了,memcached.properties文件是memcached的配置文件,放入你的classes根即可。 

使用过程注意几个问题: 
1、memcache在一定时间内应该足够大,这样不会出现用户session从Cache中被清除的问题。 
2、如果session的读取比写入要多很多,可以在memcache前再加一个Oscache,减少对memcache的读操作,从而减小网络开销,提高性能(这也是codeutil提出的,我自己也实现了,不过没有加入源码,大家可以自己做)。 
3、如果用户非常多,可以使用memcached组,通过set方法中带hashCode,插入到某个memcached服务器 

其实使用memcached做session管理,我认为是把memcached作为一个可以相对持久化的内存工具,大家可以使用测试一下。

因为都是从缓存获取session,不是从某个服务端获取session,所以没有转移一说 

由上面的代码可知getsession,服务容器会调用容器内部的方法获取客户端的cookieid,然后调用自己的getsession对比(服务器自己会做的工作),这段代码里面利用这个特性复写让复写后的getsession等来自于缓存这样只要缓存同步一致对比肯定通过,这样就绕过了对比机制,后面就放行了(所以复制过来的session不必同步到新的服务上)

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2368079