`
laoer
  • 浏览: 52272 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用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作为一个可以相对持久化的内存工具,大家可以使用测试一下。
分享到:
评论
11 楼 xinyiwust 2013-08-21  
楼主是只考虑了cookie的情况,没考虑禁用cookie后url rewrite的情况吧?
10 楼 balaschen 2007-05-28  
或者到http://www.iteye.com/my_topic/24505下载我修改过的版本
9 楼 balaschen 2007-05-28  
liuzongan 写道
balaschen 写道
laoer 写道

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


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


memcached -M
8 楼 liuzongan 2007-05-28  
我看到了
<filter-mapping>
<filter-name>MemcachedSessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
7 楼 liuzongan 2007-05-28  
我看了一下楼主的代码,可是没有看懂,我不知memcache怎么控制session的,因为jsp1和jsp2没有调用memcache的相关代码
6 楼 liuzongan 2007-05-28  
balaschen 写道
laoer 写道

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


加上-M参数就可以关闭LRU算法,session就 不会从cache中被清除
请问一下在哪里加上-M可以关闭LRU算法啊?
5 楼 balaschen 2007-05-28  
laoer 写道

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


加上-M参数就可以关闭LRU算法,session就 不会从cache中被清除
4 楼 laoer 2007-05-24  
这样也可以通过设定Cookie时长来处理,把Cookie的时间设为30分钟,超过这个时间也就取不到Session了,但这样的话memcache那边会有比较多的消耗,占用内存空间而不能得到清除。
还有一个方法就是写入memcached的时候指定它的失效时间。
如果要实现一个通用的可以集群管理Session的系统,还是要完整的实现像应用服务器Session管理的功能,我曾设想Oscache+后端数据库或文件系统的方式管理Session,但需要做一个定时扫描程序来来清除过期的Session。
3 楼 devilbaby 2007-05-24  
laoer 写道
devilbaby 写道
还不错,不过session的话,还要考虑过时的时候把memecached相关的清空


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


这样也会有问题的,打个比方,我们的session设置了30分钟过期,那过期后有些操作应该不能进行了,但是如果用memcached来做session的缓存,如果当过期时不清楚缓存,那样就达不到想要的效果。
还是修改codeutil提供的代码,把session过期时就根据key清楚相关缓存好
2 楼 laoer 2007-05-24  
devilbaby 写道
还不错,不过session的话,还要考虑过时的时候把memecached相关的清空


这个问题我也想到了,按照经验,可以在凌晨人最少的时候,对memcached做一次清空。
1 楼 devilbaby 2007-05-24  
还不错,不过session的话,还要考虑过时的时候把memecached相关的清空

相关推荐

    j2ee项目使用filter和memcached实现session服务器

    本项目通过结合使用Filter(过滤器)和Memcached来实现一个高效的session服务器,以解决跨服务器会话共享的问题。 首先,让我们详细了解一下`Filter`。在Java Web开发中,Filter是Servlet API的一部分,允许开发者...

    memcached-session-manager-1.8.1

    2. **Session持久化**:每次session数据发生变化时,MSM都会自动更新存储在Memcached中的对应session数据,确保数据一致性。 3. **负载均衡**:MSM支持多种负载均衡策略,如轮询、最少连接等,确保session在多个...

    Tomcat+memcached+Nginx实现session共享

    MSM是一个Java Servlet Filter,它允许Tomcat将用户的session数据存储在memcached分布式缓存中,从而实现跨多个Tomcat实例的session共享。MSM支持两种模式:Sticky和Non-Sticky。 - **Sticky模式**:在这个模式下...

    改进基于filter的远程分布式session存储

    总的来说,该主题探讨了如何通过Filter在分布式环境中有效地管理和存储Session,这对于构建可扩展和高可用的Web服务至关重要。通过对Filter的利用和优化,开发者可以设计出更高效、更健壮的远程分布式session存储...

    memcached监控模板

    Memcached是一个高性能、分布式内存对象缓存系统,广泛应用于数据库缓存和session存储。它通过在内存中存储数据,实现快速读取,降低对磁盘I/O的依赖,从而提高系统性能。 ### 2. Zabbix介绍 Zabbix是一款开源的...

    MSM所需Jar包

    在多服务器的Web应用环境中,传统的session存储方式(如本地内存或文件系统)无法实现session的跨服务器共享,可能导致用户登录状态丢失。Memcached因其分布式特性,能解决这个问题,使得session数据可以在多台...

    分布式服务集群下实现session共享解决方案.docx

    6. Memcached:使用内存缓存系统存储session,性能优于数据库,但数据序列化影响效率,且服务器故障会导致session丢失。 7. Redis:内存数据库,适用于session存储,配置简单,性能高,不易丢失数据,是目前广泛...

    Spring Session实现分布式session的简单示例

    Spring Session 实现分布式 Session 的简单示例 在本篇文章中,我们将介绍如何使用 Spring...同时,Spring Session 支持多种数据存储方式,如 Redis、Memcached 等。这使得开发者可以根据需要选择合适的数据存储方式。

    Tomcat 同一服务器上 不同web项目共享session的

    5. **使用分布式session**:如果在集群环境中,可以使用如Memcached、Redis等缓存服务作为session的存储,所有节点都可以访问这些存储,实现跨服务器的session共享。 6. **使用Filter**:编写一个Filter,拦截请求...

    SpringBoot整合Shiro,实现从数据库加载权限、权限的动态更新、Session共享

    - **跨应用Session**:在分布式环境中,多个应用间需要共享Session,可以借助Shiro的`SessionManager`和`SessionDAO`,配合缓存技术(如Redis或Memcached)来实现。 - **配置SessionManager**:自定义`Session...

    shiro的全流程demo,世界shiro在spring中认证、授权流程,自定义授权类型,分布式session、授权缓存的实现

    每个客户端的 session 数据会被同步到共享存储中,确保所有节点都能访问到一致的 session 信息。 缓存管理在提高性能和减少数据库访问压力方面起到关键作用。Shiro 提供了缓存接口,可以集成 Redis、Memcached 或者...

    shiro中session的共享问题与完成前后端权限的校验

    可以配置如Redis或Memcached作为Session的存储后端,将Session数据保存在缓存服务中,确保各个节点都能访问到同一份Session数据。 Shiro的Session管理主要包括以下几个步骤: 1. 用户登录成功后,Shiro会创建一个...

    单点登录SpringSsession

    2. **可插拔的存储层**:虽然默认使用Redis,但Spring Session也支持其他存储技术,如Memcached等。 3. **灵活的会话管理**:提供了多种策略来管理会话的有效期、会话的失效处理等。 4. **安全性**:支持HTTPS协议,...

    java_web 用户只能在一处登陆源码

    这通常通过在数据库或缓存中存储Session ID与在线用户关联,当新登录时检查并更新在线状态实现。 3. **Cookie管理**: Session ID是通过Cookie在客户端和服务器之间传递的。在SSO场景下,可能还需要设置Cookie的...

    sso.zip_sso_sso java

    在SSO场景下,Memcached可以作为共享Session的存储介质,确保各个应用系统能够访问到用户的统一认证信息。 在Java中实现SSO,通常包含以下几个关键步骤: 1. **认证中心(Authentication Center,AC)**:这是SSO...

    java web 统计在线人数

    在Java Web开发中,统计在线人数是一项常见的需求,它能够帮助我们了解网站或应用的实时活跃用户数量。这里我们将深入探讨如何实现这一功能。...选择合适的实现方式取决于项目规模、性能需求以及团队的技术栈。

    PHP实例开发源码-盾灵多任务推广系统 php版.zip

    9. 缓存技术:为了提升性能,系统可能使用了PHP的缓存技术,如APC、Memcached或Redis,来存储频繁访问的数据,减少数据库的负载。 10. 框架使用:虽然没有明确提及,但现代PHP开发通常会使用框架如Laravel、Symfony...

    Java实现的单态登陆

    - 在分布式环境中,由于多台服务器无法共享内存中的单例对象,我们需要借助如Redis、Memcached等缓存服务来存储和同步登录状态。每次有新的登录,都将登录状态写入缓存,并确保所有服务器都能访问到这个信息。 6. ...

Global site tag (gtag.js) - Google Analytics