论坛首页 Java企业应用论坛

扩展Tomcat 6.x,使用memcached存放session信息

浏览 103180 次
该帖已经被评为精华帖
作者 正文
   发表时间:2007-05-22  
另外使用memcached作session server一定要注意设置足够大的内存,因为memcached是作为一个cache server而设计的,当增加新的session时,如果memcached的内存不足,会使用memcached设定的算法(先进先出之类的)把之前的session移除,可能造成一部分未失效的session相关联的用户无法登陆。
0 请登录后投票
   发表时间:2007-05-22  
balaschen 写道
另外使用memcached作session server一定要注意设置足够大的内存,因为memcached是作为一个cache server而设计的,当增加新的session时,如果memcached的内存不足,会使用memcached设定的算法(先进先出之类的)把之前的session移除,可能造成一部分未失效的session相关联的用户无法登陆。


赞同,memcached足够大的情况下才可以。
0 请登录后投票
   发表时间:2007-05-23  
balaschen 写道
我倾向于不在session存放业务数据,在session一般只存放userId信息,所以session中存储的数据是不会变的,而与session相关的数据,不如购物车之类的,由相应的业务逻辑来处理(要不要cache和如何cache是业务逻辑层的事情),毕竟在业务逻辑层cache数据比在tomcat这个层面简单多了。
既然session存储的数据不会变,自然也就不需要oscache之类支持cluster的cache了,只要一个简单map的可以,map找不到再到memcached server找(基本上可以重用tomcat原先的session实现),当然如果你的设计会把一些可能变化的数据放到session中,确实需要使用oscache。

PS:oscache应该是一级cache,memcached才是二级cache吧


我也赞同session里面只放些userid的信息,小对象如String,不赞成放list等业务数据或大对象。但是我看过太多的项目都把大对象放到session里。出于对老项目的支持,加上oscache多种选择,还是有好处的
0 请登录后投票
   发表时间:2007-05-23  
把list等业务数据或大对象放到session是不好的事情,但如果真的要来不同的页面之间传递,那该放到什么地方呢?很想知道!
0 请登录后投票
   发表时间:2007-05-23  
laoer 写道
balaschen 写道
另外使用memcached作session server一定要注意设置足够大的内存,因为memcached是作为一个cache server而设计的,当增加新的session时,如果memcached的内存不足,会使用memcached设定的算法(先进先出之类的)把之前的session移除,可能造成一部分未失效的session相关联的用户无法登陆。


赞同,memcached足够大的情况下才可以。

如果是命令行方式,可以增加 -M选项关闭LRU算法,如果是想用配置文件,可以到http://www.iteye.com/topic/24505 下载新的版本,我刚刚更新到1.2.1版本
0 请登录后投票
   发表时间:2007-05-23  
streamfly 写道
把list等业务数据或大对象放到session是不好的事情,但如果真的要来不同的页面之间传递,那该放到什么地方呢?很想知道!


一般来说,我会做一个sessionContext,使用theadlocal来保存当前线程上下文相关数据,如果数据是在多个请求之间共用,可以把这部分数据放到缓存或数据库(主要看你的这部分数据有无持久化的需要),这样不仅可以在view层共享,也可以在业务逻辑层访问这部分数据。另外增加一个CloseSessionListener,在session失效时清除不必要的数据(也可以利用cache的失效机制)
0 请登录后投票
   发表时间:2007-05-23  
robbin 写道
你的工作很有价值!使得普通Java Web应用在tomcat上面一下具备了SNA架构的能力,有空的时候我会测试一下你的方案,review一下代码。


SNA应该指的是不同的请求之间share nothing吧。
从这个角度说,用memcached自己实现一个session其实和实现session stick并没有本质的区别。
之所以要谨慎使用容器自带的HttpSession,还是因为HttpSession本身的性能有问题吧。
0 请登录后投票
   发表时间:2007-05-23  
pupi 写道
robbin 写道
你的工作很有价值!使得普通Java Web应用在tomcat上面一下具备了SNA架构的能力,有空的时候我会测试一下你的方案,review一下代码。


SNA应该指的是不同的请求之间share nothing吧。
从这个角度说,用memcached自己实现一个session其实和实现session stick并没有本质的区别。
之所以要谨慎使用容器自带的HttpSession,还是因为HttpSession本身的性能有问题吧。


首先使用session stick很耗性能,因为是在应用层处理session stick
其次,当某个webap当机的时候,必须重新登陆(如果要避免重新登陆,则必须实现session复制)

所以所谓的粘性session解决方案并非是share nothing
0 请登录后投票
   发表时间:2007-05-23  
balaschen 写道
pupi 写道
robbin 写道
你的工作很有价值!使得普通Java Web应用在tomcat上面一下具备了SNA架构的能力,有空的时候我会测试一下你的方案,review一下代码。


SNA应该指的是不同的请求之间share nothing吧。
从这个角度说,用memcached自己实现一个session其实和实现session stick并没有本质的区别。
之所以要谨慎使用容器自带的HttpSession,还是因为HttpSession本身的性能有问题吧。


首先使用session stick很耗性能,因为是在应用层处理session stick
其次,当某个webap当机的时候,必须重新登陆(如果要避免重新登陆,则必须实现session复制)

所以所谓的粘性session解决方案并非是share nothing


是这么回事。

不过session stick的方案,也可以用cookie的方式类解决重复登陆的问题。
0 请登录后投票
   发表时间:2007-05-23  
pupi 写道
balaschen 写道
pupi 写道
robbin 写道
你的工作很有价值!使得普通Java Web应用在tomcat上面一下具备了SNA架构的能力,有空的时候我会测试一下你的方案,review一下代码。


SNA应该指的是不同的请求之间share nothing吧。
从这个角度说,用memcached自己实现一个session其实和实现session stick并没有本质的区别。
之所以要谨慎使用容器自带的HttpSession,还是因为HttpSession本身的性能有问题吧。


首先使用session stick很耗性能,因为是在应用层处理session stick
其次,当某个webap当机的时候,必须重新登陆(如果要避免重新登陆,则必须实现session复制)

所以所谓的粘性session解决方案并非是share nothing


是这么回事。

不过session stick的方案,也可以用cookie的方式类解决重复登陆的问题。


这不单单是一个重复登陆的问题,是sticky无法保证failureover,我是说在集群的时候,而replication对性能影响又大,所以才会想到用分布式缓存来做取代方案把
0 请登录后投票
论坛首页 Java企业应用版

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