使用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.61 tengine2.1.0
node1a 后端服务器 192.168.80.41 tomcat7.0
node1b 后端服务器 192.168.80.31 tomcat7.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

使用memcached解决session一致性问题_第1张图片

6.编辑index.jsp

 使用memcached解决session一致性问题_第2张图片

<%@page language="java" contentType="text/html;charset=UTF-8"  pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>

SessionIP:<%=request.getServerName()%>

node1a page

7.测试

(1)没有启动memcached之前

使用memcached解决session一致性问题_第3张图片使用memcached解决session一致性问题_第4张图片

 (2)启动了memcached之后

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

使用memcached解决session一致性问题_第5张图片

使用memcached解决session一致性问题_第6张图片

总结

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

 

你可能感兴趣的:(nginx)