论坛首页 Java企业应用论坛

分布式Session的一个实现.

浏览 22768 次
精华帖 (1) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-06-17  
尔今尔后 写道
session 在缓存服务器之间是如何同步的?



你可以看一下源代码里的CacheHttpSession.synchronizationCache方法.
0 请登录后投票
   发表时间:2013-06-17  
etnet 写道
jinnianshilongnian 写道
引用
每一次请求结束,都会进行一次缓存同步.由于每次讲求都会造成访问时间的更新,所以这个值是一直会被put到缓存中的.
给个建议: 只有当用户操作attribute时 同步 缓存  其他情况一律如5分钟更新一次(更新时间戳)[可以加个本地缓存,这不需要每次都从远程取session了]。 还有如游客 也无需同步。目前我使用这个来保存session信息。

https://github.com/zhangkaitao/es/blob/master/web/src/main/java/org/apache/shiro/session/mgt/eis/OnlineSessionDAO.java



对,现在只有Session中的属性被修改时才会同步缓存,但是这个访问时间暂时还是每次请求结束都会PUT一下缓存.

因为我们的应用里面会对Session的最后访问时间进行检测做一下业务判断,以后我会增加一个开关如果不需要最后访问时间的精准那么可以考虑异步的积累到一定时间再去更新一次等.

我觉得放到Session里的东西,放太大的东西这本身就是个问题了吧?(个人意见)

我也不推荐往session里放东西;不过假设你使用springmvc  它本身就会放一些它自己需要的,但这些同步是没有意义的。
0 请登录后投票
   发表时间:2013-06-17   最后修改:2013-06-17
这也是一个思路 不错
0 请登录后投票
   发表时间:2013-06-18  
正好在纠结这种问题, 怒赞...
0 请登录后投票
   发表时间:2013-06-19  
看了代码写的很好,memcached存放session的套路还是差不多的。需要解决的问题,集中在如下:
1.session的访问时间如何更新的问题.
2.session是map存放,还是每个session attribute单个存放的问题.
3.session失效问题。

各种项目对session的要求都不一样,应根据项目定制session发挥最大的性能。

我们现在做的项目是一个政府项目,session也是存放到memcache,方案:
sessionid(cookie)+sessionId(存放到memcached,每次请求后只刷新这个sessionId,值是userId),user对象当最普通的cache处理,对应的key为userId.
0 请登录后投票
   发表时间:2013-06-19  
还有很大的优化空间,现在的问题主要是看你对于Session的值修改的多与不多.

attirbute不是很多的情况下.

如果分开存放,每个attribute一个KEY-VALUE,那么第一次读取Session时批量读取还是比单个KEY-VALUE读取要慢一些.

如果用一个Map存放,那么读时会快些,可是不管那个属性被更新了那么都将造成完整的Map被PUT....

这里用了第二种,因为我认为Session里面应该只放些简单,必要和最少的东西.
0 请登录后投票
   发表时间:2013-07-01  
分布式session学习了。
0 请登录后投票
论坛首页 Java企业应用版

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