该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间: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作为一个可以相对持久化的内存工具,大家可以使用测试一下。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-24
还不错,不过session的话,还要考虑过时的时候把memecached相关的清空
|
|
返回顶楼 | |
发表时间:2007-05-24
devilbaby 写道 还不错,不过session的话,还要考虑过时的时候把memecached相关的清空
这个问题我也想到了,按照经验,可以在凌晨人最少的时候,对memcached做一次清空。 |
|
返回顶楼 | |
发表时间:2007-05-24
laoer 写道 devilbaby 写道 还不错,不过session的话,还要考虑过时的时候把memecached相关的清空
这个问题我也想到了,按照经验,可以在凌晨人最少的时候,对memcached做一次清空。 这样也会有问题的,打个比方,我们的session设置了30分钟过期,那过期后有些操作应该不能进行了,但是如果用memcached来做session的缓存,如果当过期时不清楚缓存,那样就达不到想要的效果。 还是修改codeutil提供的代码,把session过期时就根据key清楚相关缓存好 |
|
返回顶楼 | |
发表时间:2007-05-24
这样也可以通过设定Cookie时长来处理,把Cookie的时间设为30分钟,超过这个时间也就取不到Session了,但这样的话memcache那边会有比较多的消耗,占用内存空间而不能得到清除。
还有一个方法就是写入memcached的时候指定它的失效时间。 如果要实现一个通用的可以集群管理Session的系统,还是要完整的实现像应用服务器Session管理的功能,我曾设想Oscache+后端数据库或文件系统的方式管理Session,但需要做一个定时扫描程序来来清除过期的Session。 |
|
返回顶楼 | |
发表时间:2007-05-28
laoer 写道 使用过程注意几个问题: 1、memcache在一定时间内应该足够大,这样不会出现用户session从Cache中被清除的问题。 加上-M参数就可以关闭LRU算法,session就 不会从cache中被清除 |
|
返回顶楼 | |
发表时间:2007-05-28
balaschen 写道 laoer 写道 使用过程注意几个问题: 1、memcache在一定时间内应该足够大,这样不会出现用户session从Cache中被清除的问题。 加上-M参数就可以关闭LRU算法,session就 不会从cache中被清除 |
|
返回顶楼 | |
发表时间:2007-05-28
我看了一下楼主的代码,可是没有看懂,我不知memcache怎么控制session的,因为jsp1和jsp2没有调用memcache的相关代码
|
|
返回顶楼 | |
发表时间:2007-05-28
我看到了
<filter-mapping> <filter-name>MemcachedSessionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
|
返回顶楼 | |
发表时间:2007-05-28
liuzongan 写道 balaschen 写道 laoer 写道 使用过程注意几个问题: 1、memcache在一定时间内应该足够大,这样不会出现用户session从Cache中被清除的问题。 加上-M参数就可以关闭LRU算法,session就 不会从cache中被清除 memcached -M |
|
返回顶楼 | |