使用memcached解决session一致性问题

目录

 

使用memcached解决session一致性问题

1.模拟网站架构

2.memcached是什么

3.安装memcached

4.将memcached所需jar文件上传到后端服务器tomcat的lib目录

5.配置tomcat的server.xml文件和context.xml

(1)server.xml

(2)context.xml

6.编辑index.jsp

7.测试

(1)没有启动memcached之前

 (2)启动了memcached之后

总结


使用memcached解决session一致性问题

客户端访问web站点的时候,会产生一个session,该session是由服务器端产生一个sessionId分配给客户端的,我们可以利用session保存一些用户信息,例如用户是否登录,用户名等信息,用以在该网站的其他页面畅行无阻,可以做需要这些信息才可以做的操作。

session保存在服务器端,在一个时间段内,这个session不会销毁,所以,我们平时发现在某个网站(例如淘宝)登录后,在该网站的其他页面也是做诸如加入购物车、下单、付款等操作再不需要输入用户名和密码了,因为服务器已经保存了你的登录状态和用户名。

但是,当我们使用nginx进行反向代理的时候,多台后端服务器并不能都保存你的session,如果不做处理,运气不好的话,当你要下单购买东西时候,发现总是需要登录登录,登录了一天还买不到东西 (+﹏+)。

上面所说的就是session一致性问题。

那如何解决session一致性问题呢?也就是用户的session面对多台后端服务器的时候,该如何保存的问题。

解决方案有不少,例如,可以使用memcached、redis、nginx的会话保持等解决,本文介绍当后端服务器是tomcat的时候,使用memcached解决session一致性。

1.模拟网站架构

(1)IP分配

nginx反向代理的服务器
服务器名作用IP地址安装软件
node1-1前端服务器192.168.80.61tengine2.1.0
node1a后端服务器192.168.80.41tomcat7.0
node1b后端服务器192.168.80.31tomcat7.0

(2)架构图

2.memcached是什么

官网地址: http://memcached.org/ 

Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.

Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.

3.安装memcached

这里,我们选择memcache安装在nginx服务器上

4.将memcached所需jar文件上传到后端服务器tomcat的lib目录

5.配置tomcat的server.xml文件和context.xml

(1)server.xml

修改这个的目的是想看看客户端的sessionID是由哪个服务器生成的。

 

(2)context.xml

在context.xml的Context配置Manager

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

6.编辑index.jsp

 

<%@page language="java" contentType="text/html;charset=UTF-8"  pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1><font color=blue>node1a page</font></h1>

7.测试

(1)没有启动memcached之前

 (2)启动了memcached之后

从显示可以看出,两个虚拟主机的sessionID一样。

总结

本文介绍了什么是session一致性问题,如何使用memcached解决session一致性问题。其他方法请大家网上搜索一下解决方案。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值