解决两台tomcat服务器之间的session共享问题

为了解决两个tomcat之间的session共享,我们采用将session存入redis中,而这一操作实际上就是序列化和反序列化。在解决这个问题后,发现了一个新的问题,上代码:

解决两台tomcat服务器之间的session共享问题_第1张图片

红框里的判断,在用了redis存储后返回的是false,如果不用redis存储,则是true,发现这个问题也是因为sit环境和uat环境不一致,sit环境部署了两台tomcat,所以需要做session共享。

原因:captcha.getAvail()和Constant.TO_SECOND_STEP都是返回Integer的,对于Integer和Integer比较,在Integer的值处于-128~127的范围时,两个Integer的对象之间用==、!=比较都是没问题的,因为在jdk1.5之后jvm把这个范围内的数字缓存起来了,用于性能的提升和节省内存,所以这个范围自动拆装箱,但是我们通过new Integer(1)的方法则不会从缓存中取出,所以这里猜测,如果用了redis存储的话,对 对象的反序列化可能不是从缓存中去取的,所以导致captcha.getAvail()的值的地址与之前不同,也就造成了这样现象。这个想法需要验证。

你可能感兴趣的:(解决两台tomcat服务器之间的session共享问题)