论坛首页 Java企业应用论坛

使用Filter方式实现用Memcached储存Session

浏览 35776 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-05-24  
这两天看到了帖子《扩展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作为一个可以相对持久化的内存工具,大家可以使用测试一下。
   发表时间:2007-05-24  
还不错,不过session的话,还要考虑过时的时候把memecached相关的清空
0 请登录后投票
   发表时间:2007-05-24  
devilbaby 写道
还不错,不过session的话,还要考虑过时的时候把memecached相关的清空


这个问题我也想到了,按照经验,可以在凌晨人最少的时候,对memcached做一次清空。
0 请登录后投票
   发表时间:2007-05-24  
laoer 写道
devilbaby 写道
还不错,不过session的话,还要考虑过时的时候把memecached相关的清空


这个问题我也想到了,按照经验,可以在凌晨人最少的时候,对memcached做一次清空。


这样也会有问题的,打个比方,我们的session设置了30分钟过期,那过期后有些操作应该不能进行了,但是如果用memcached来做session的缓存,如果当过期时不清楚缓存,那样就达不到想要的效果。
还是修改codeutil提供的代码,把session过期时就根据key清楚相关缓存好
0 请登录后投票
   发表时间:2007-05-24  
这样也可以通过设定Cookie时长来处理,把Cookie的时间设为30分钟,超过这个时间也就取不到Session了,但这样的话memcache那边会有比较多的消耗,占用内存空间而不能得到清除。
还有一个方法就是写入memcached的时候指定它的失效时间。
如果要实现一个通用的可以集群管理Session的系统,还是要完整的实现像应用服务器Session管理的功能,我曾设想Oscache+后端数据库或文件系统的方式管理Session,但需要做一个定时扫描程序来来清除过期的Session。
0 请登录后投票
   发表时间:2007-05-28  
laoer 写道

使用过程注意几个问题:
1、memcache在一定时间内应该足够大,这样不会出现用户session从Cache中被清除的问题。


加上-M参数就可以关闭LRU算法,session就 不会从cache中被清除
0 请登录后投票
   发表时间:2007-05-28  
balaschen 写道
laoer 写道

使用过程注意几个问题:
1、memcache在一定时间内应该足够大,这样不会出现用户session从Cache中被清除的问题。


加上-M参数就可以关闭LRU算法,session就 不会从cache中被清除
请问一下在哪里加上-M可以关闭LRU算法啊?
0 请登录后投票
   发表时间:2007-05-28  
我看了一下楼主的代码,可是没有看懂,我不知memcache怎么控制session的,因为jsp1和jsp2没有调用memcache的相关代码
0 请登录后投票
   发表时间:2007-05-28  
我看到了
<filter-mapping>
<filter-name>MemcachedSessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
0 请登录后投票
   发表时间:2007-05-28  
liuzongan 写道
balaschen 写道
laoer 写道

使用过程注意几个问题:
1、memcache在一定时间内应该足够大,这样不会出现用户session从Cache中被清除的问题。


加上-M参数就可以关闭LRU算法,session就 不会从cache中被清除
请问一下在哪里加上-M可以关闭LRU算法啊?


memcached -M
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics