Java中tomcat memecached session 共享同步问题的解决办法_java

事件缘由:一个主项目“图说美物”,另外一个子功能是品牌商的入驻功能,是跟主项目分开的项目,为了共享登录的用户信息,而实现session共享,俩个tomcat,一个tomcat6,一个tomcat7

web项目windows系统下实现session的共享

第一个步:

在俩个tomcat的context.xml这个文件中配置如下代码:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211"
lockingMode="auto"
sticky="true"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
copyCollectionsForSerialization="true"
/>

第二步:

Tomcat6下添加的jar包:

tomcat7下添加的jar包:

PS:利用memcache来保存tomcat的session会话

 写此文的主要目的是修正一下,部分网上有误的地方。

前提条件:

1、memcached正常工作了
2、tomcat 正常工作了。

1、安装方法及安装包

javolution-5.4.3.1.jar
memcached-2.4.2.jar
memcached-session-manager-1.3.0.jar
msm-javolution-serializer-cglib-1.3.0.jar
msm-javolution-serializer-jodatime-1.3.0.jar 

安装方法:  将这几个包放到/usr/local/tomcat6.0/lib里。 

2、编辑tomcat的配置文件。

<这一点很重要,因为网上大多数文章都是说修改server.xml里配置;我试过但最终发现session的信息没有存入到memcache中,我意识到这可能是配置有问题。目前发现编辑context.xml这个文件,是可以立即将session丢入到memcache中的。>

# vim /usr/local/tomcat6.0/conf/context.xml
<Context>
<!-- 在这个字段下添加以下内容,在节点入请填入你的memcached服务器ip及端口号-->
        <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
            memcachedNodes="n1:10.254.41.197:11211"
            requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
            sessionBackupAsync="false"
            sessionBackupTimeout="100"
            transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
            copyCollectionsForSerialization="false" />
</Context> 

3、如何测试?

我目前的测试方法是,通过apache的mod_jk来实现负载均衡(之前的文章里有写),并且启用tomcat之间的会话复制。
这样的结果就是,seesion ID会随着每次用户的提交而变换节点,但ID不变。

例如:

ID CFC1ACAC6B0B8C27BEA76919F3A99BF8-n1.tomcat2 

下次提交就会变成: <节点切换了,但是ID不变>

ID CFC1ACAC6B0B8C27BEA76919F3A99BF8-n1.tomcat1  

结合memcache的状态: <我之前在会话没有成功的丢到memcached这里时,cmd_set 为0 >

# perl memcached-tool.pl 10.254.41.197:11211 stats
                 cmd_get          27
                 cmd_set          15
                 get_hits           12
# perl memcached-tool.pl 10.254.41.197:11211 stats
                 cmd_get          31
                 cmd_set          17
      get_hits           14 
 

我想通过以上的判断,配置 是成功的!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索tomcat_session共享
memecached、tomcat session共享、tomcat8 session共享、tomcat7 session共享、多tomcat session共享,以便于您获取更多的相关知识。

时间: 2025-01-21 06:40:44

Java中tomcat memecached session 共享同步问题的解决办法_java的相关文章

java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list错误解决办法_java

java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list错误解决办法 玩web的SSH总会有些令你意想不到的exception,这里其中有很多事自己不小心,或者马虎所造成.因此,解决的方案会各有不同,别人出现的异常解决方案对你的可能无效,就像上面的我报的异常一样,百度了很多很多次,给我的答案无非就是在aop上加上一句,但是非常抱歉,我加上去无效!所以还是那句话,对于自己的异常,还是要自己解决. 首先说明一下,我这次的练习的ssh结构

Java中synchronized关键字修饰方法同步的用法详解_java

Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有一个允许被访问. 静态方法则有不同的行为.用synchronized关键字声明的静态方法,同时只能够被一个执行线程访问,但是其他线程可以访问这个对象的非静态的synchronized方法.必须非常谨慎这一点,因为两个线程可以同时访问一个对象的两个不同的synchronized方法,即其中一个是静态s

java中netbeans org.tigris.subversion.javahl.ClientException错误解决办法

org.tigris.subversion.javahl.ClientException: The path 'D:\xampp\htdocs\test' appears to be part of a Subversion 1.7 or greater working copy.  Please upgrade your Subversion client to use this working copy. 解决办法 在 NetBeans 7.0\etc\netbeans.conf 文件中增加

MyBatis中使用$和#所遇到的问题及解决办法_java

在上篇文章给大家介绍了Mybatis中#{}和${}传参的区别及#和$的区别小结,如果大家有需要可以参考下. $和#简单说明: #相当于对数据 加上 双引号,$相当于直接显示数据. 一.总结 mybatis中使用sqlMap进行sql查询时,经常需要动态传递参数.动态SQL是mybatis的强大特性之一,也是它优于其他ORM框架的一个重要原因.mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态SQL进行处理的.在动态 SQL 解析

Java中Cookie和Session的那些事儿_java

Cookie和Session都是为了保持用户的访问状态,一方面为了方便业务实现,另一方面为了简化服务端的程序设计,提高访问性能.Cookie是客户端(也就是浏览器端)的技术,设置了Cookie之后,每次访问服务端,请求中都会带上Cookie:Session是服务端技术,在服务端存储用户的访问信息. 使用Cookie传递信息,随着Cookie个数增多和访问量增大,它占用的带宽会越来越大:使用Session保存信息,最大的弱点就是不容易在多台服务器之间共享. 1 Cookie 通俗地讲,当用户使用H

bboss中如何开启session共享机制

问题描述 请问bboss中如何开启session共享机制呢 解决方案 bboss中关闭和开启session共享机制方法:开启,修改文件resources/sessionconf.xml 属性为:<property name="sessionstore" refid="attr:sessionstore"/> <!-- <property name="sessionstore" value="session&quo

java中ajax清除session

问题描述 java中ajax清除session 问题描述:需要做一个退出按钮,点击退出时清空当前用户的session ajax 后台继承的是:SessionAware. 例如 1.用户1登录的时候 session健是用户 1+XXX(唯一) 以此例推 用户1点击退出 用ajax清空他本身的值,不清除其他用户的session值. 2.还是说每个用户登录后即使保存的健一样但是session会生成一个sessionID? 3.如何用ajax怎么把当前的session健传后台清除? java大师解答:

Java中判断对象是否相等的equals()方法使用教程_java

Object类中的equals方法用于检测一个对象是否等于另一个对象.在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为默认操作也是合乎情理的.然而,对于多数类类说,这种判断并没有什么意义,例如,采用这种方式比较两个PrintStream是否相等就完全没有意义.然而,经常需要检测两个对象状态的相等性,如果两个对象的状态相等,就认为这两个对象是相等的.所以一般在自定义类中都要重写equals比较. 下面给出编写一个完美eq

java代码-求上传文件中nosuchmethoderror(androidsdk与httpclientjar冲突)解决办法

问题描述 求上传文件中nosuchmethoderror(androidsdk与httpclientjar冲突)解决办法 android项目使用阿里云上传文件的Sample文件代码,出现了nosuchmethoderror,然后我顺着日志查到android sdk中在org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager这个类里只有一个构造方法,而代码依赖的httpclient是4.1.3版本,相同的类里有4个构造方法,我认为问题可