该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-24
apache 的 mod_ajp等,就是用来将用户请求实现 session sticky的。 |
|
返回顶楼 | |
发表时间:2007-05-28
楼主的代码 createSession 方法是不是写错了?怎么没有把session放到memcached中?
|
|
返回顶楼 | |
发表时间:2007-05-29
codeutil 写道 ... 5.运行memcached.exe。 (可以运行memcached.exe -vv , -vv可以在控制台显示日志信息 ) 6。启动tomcat,在web应用中setAttribute设置支持序列化的属性值。 7. 然后重起tomcat,在再浏览器里访问,jsp读取相关属性的值(使用getAttribute方法),将发现相应属性值都可以正常读取。 (getAttributeNames没有重写,因此无法遍历方式读取属性,只能通过getAttribute读取) 在tomcat6中试了楼主的方法。确实memcached生效了。 但是 setAttribute之后,重启动tomcat,再去同一个浏览器getAttribute。这样得不到结果。 是因为关闭tomcat时,所有的session被清空了?还是别的原因? btw: tomcat5.5中是否有相似的方案呢?我简单尝试了一下,出错。 |
|
返回顶楼 | |
发表时间:2007-05-31
codeutil 写道 加入oscache的目的减少对memcached的访问次数。 假设启动了20个tomcat, 假如某个attribute,序列化之后的内容长度为10k, 在30分钟内被读取了100次,修改了两次, 如果只使用memcached的话,需要向memcached读取100次, 产生100*10=1M的网络流量, 而使用了oscache的话, 只需要向memcached读取三次,在属性值发生变化的时候,其它tomcat将会收到2*20次缓存失效的jgroups消息。 这样的开销是远远低于对memcached的不停访问的,也减少了序列化和反序列化的开销。 没有必要再用OSCache了吧,如果用OSCache的JGroups机制实现session同步,Memcached没什么存在意义了。 public Object getAttribute(String name) { Object obj = super.getAttribute(name); String key = name + this.getId(); if (obj != null && !(obj instanceof java.io.Serializable)) { //这里是否需要更新一下Memcached的更新时间?否则久了,Memcached会删除过期记录的;但是我看了一下MemCachedClient的API,没有这么一个方法,难道要Hack Memcached? return obj; } obj = mc.get(key); if(obj!=null)super.setAttribute(name, obj); //这句是我新加上去的,当本地session没有,则从Memcached服务器上取,并存到本地session里就行了吧,何必用OSCache? return obj; } public void setAttribute(String name, Object value) { removeAttribute(name); super.setAttribute(name, value); if (value != null && value instanceof java.io.Serializable) { String key = name + this.getId(); mc.set(key, value); } } |
|
返回顶楼 | |
发表时间:2007-06-05
if (obj != null && !(obj instanceof java.io.Serializable)) { return obj; } 这一句是不是写错了,应该是这样吧? if (obj != null && obj instanceof java.io.Serializable) { return obj; } |
|
返回顶楼 | |
发表时间:2007-06-05
对于楼主说要用OSCache来解决的情况我也碰到了。
|
|
返回顶楼 | |
发表时间:2007-06-05
pupi 写道 codeutil 写道 ... 5.运行memcached.exe。 (可以运行memcached.exe -vv , -vv可以在控制台显示日志信息 ) 6。启动tomcat,在web应用中setAttribute设置支持序列化的属性值。 7. 然后重起tomcat,在再浏览器里访问,jsp读取相关属性的值(使用getAttribute方法),将发现相应属性值都可以正常读取。 (getAttributeNames没有重写,因此无法遍历方式读取属性,只能通过getAttribute读取) 在tomcat6中试了楼主的方法。确实memcached生效了。 但是 setAttribute之后,重启动tomcat,再去同一个浏览器getAttribute。这样得不到结果。 是因为关闭tomcat时,所有的session被清空了?还是别的原因? btw: tomcat5.5中是否有相似的方案呢?我简单尝试了一下,出错。 重新用JDK1.5编译一下MemcacheClient,因为下载的版本是1.6编译的,同时把log4j的包也放到lib里,因为MemcacheClient用到了。 |
|
返回顶楼 | |
发表时间:2007-09-02
建议搂主完善一下代码,加入有多个tomcat,每个tomcat的应用是不同的,登陆后需要从一个tonmcat跳转到另一个tomcat,需要session的过期时间同步问题,如果搂主把这个解决了,就是把tomcat的做成了真正的
SNA架构了。肯定会在业界广泛使用的。以上只是 个人建议。 |
|
返回顶楼 | |
发表时间:2007-09-06
把session存放到oracle的内存表,会比memcache慢多少?
|
|
返回顶楼 | |
发表时间:2007-09-26
davexin 写道 建议搂主完善一下代码,加入有多个tomcat,每个tomcat的应用是不同的,登陆后需要从一个tonmcat跳转到另一个tomcat,需要session的过期时间同步问题,如果搂主把这个解决了,就是把tomcat的做成了真正的
SNA架构了。肯定会在业界广泛使用的。以上只是 个人建议。 Session过期问题不存在吧,楼主这里是继承了tomcat的session机制~ |
|
返回顶楼 | |