Memcache学习笔记三:Memcache管理Tomcat的Session,Session共享

实现Tomcat7集群环境下的Session共享 本文还有配套的精品资源,点击获取 简介:在多服务器或集群环境中,为保持用户登录状态和会话数据一致性,需要在Java Web应用中实现session共享。Tomcat7作为开源Servlet容器,可通过集成Memcache来支持session共享。本文提供了一个压缩包,包含实现该功能所需的关键jar包及其配置方法,包括Memcache作为session存储后端的设置和Tomc... 阅读详情

Memcache学习笔记三:Memcache管理Tomcat的Session,Session共享

标签(空格分隔): Memcache Tomcat Session


一、了解黏性Session(stick Session)和非黏性Session(non-sticky Session)

    这两个概念可以在集群分布式Session架构中很好的解释和理解,出现于应用服务器的集群环境中。如下图两种架构。
    在理解这两者的特点之前我们先看看这两种架构。
    第一种架构:应用服务器进行集群管理,客户端访问代理服务器,代理服务器进行分配哪台应用服务器进行相应请求,Session池进行
每台应用服务器的Session复制备份,防止应用服务器宕机,在这种架构中,应用服务器(Tomcat)自己也管理Session,相当于Session
池的“主节点”。有请求到达产生Session,Session池对Session进行备份。代理服务器采用的是IP分治策略,也就是对访问者的【IP进行
Hsah算法】%【当前可用服务器台数】得到的结果分配到对应的应用服务器上。这样做的好处是尽量将同一个请求都有同一台服务器进行
处理响应。但是同时也有问题存在,例如:在一个局域网里有很多客户端,但是使用的是同一个路由进行数据的转发,这样就会出现很多请
求落到了同一个应用服务器上。当出现比较极限的情况,很多局域网都落到同一台应用服务器上,就出现了负载不均的状况。这种架构能够实现自动故障转移和Session共享。

    第二种架构:代理服务器用于转发请求,应用服务器只是响应请求不对Session进行管理,Session池对应用服务器的Session统一进行管
理。请求到达应用服务器拿到请求的Session,到Session池中查询有没有Session,有就拿到进行响应,没有就创建,同时添加到
Session池中。这种架构也能够实现自动故障转移和Session共享。

这里写图片描述

  1. 黏性Session

        黏性Session:是对于用户和应用服务器之间、应用服务器和缓存的集中管理或备份服务器之间的关系。如上图的第一种架构中就
    属于粘性Session,客户端和应用服务器有一定的关系。这种关系的Session就属于粘性Session。
    
  2. 非黏性Session

        非黏性Session:像上图的第二种架构客户端和应用服务器没有任何Session的相关的联系,客户端有请求,应用服务器就去
    Session池中查询,有就进行响应,没有就创建、添加到Session池中,然后进行响应。
    

简单来讲就是:

黏性Session:当用户发出第一个请求后,负载均衡器动态的把该用户分配到某个节点,并记录该节点的路由,以后该用户的所有请求都绑定到这个路由,用户只会与该server发生交互,这种策略被称为粘性session(sticky session)。反之则是非黏性Session。

二、进行配置

准备工作:
    在window下进行配置
    两台tomcat服务器    端口好设置为:8081、8082
    一个简单测试应用

修改端口

//修改tom1的server.xml
    <Server port="8006" shutdown="SHUTDOWN">
    <Connector port="8081" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />  
//修改tom2的server.xml
    <Server port="8007" shutdown="SHUTDOWN">
    <Connector port="8082" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />      

测试应用

//tom1的应用的三个jsp文件用于测试
//add.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String name=request.getParameter("name");
    session.setAttribute("name", name);
 %>

 //index.jsp
 在body标签中表明是Tomcat1

 //show.jsp
 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String name=(String)session.getAttribute("name");
    out.println("<h1>name:"+name+"</h1>");
    out.println("<h1>sessionID:"+session.getId()+"</h1>");
 %>

 //tom2的应用的三个jsp文件用于测试
 index.jsp在body标签中表明是Tomcat2

 //其他两个jsp与tom1相同

添加jar包

memcached-session-manager-tc6-1.9.7.jar     //与使用tomcat版本必修相同,测试使用都是6
kryo相关jar     //序列化,序列化相关还有:flexjson、xstream等
memcached-session-manager-1.9.7.jar
spymemcached-2.11.1.jar

关键步骤

  1. 测试粘性Session
    修改tom1和tom2的context.xml,在Context标签中添加如下代码

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:192.168.0.167:11211,n2:192.168.0.167:11212"
        failoverNodes="n1"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
  2. 非粘性Session
    修改tom1和tom2的context.xml,在Context标签中添加如下代码

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:192.168.0.167:11211,n2:192.168.0.167:11212"
        sticky="false"
        sessionBackupAsync="false"
        lockingMode="uriPattern:/path1|/path2"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
      />

    结果自行测试,体会两者的区别
    下一篇展示nginx代理服务器对tomcat的集群的管理。

tomcat7通过memcache 实现 session共享 通过memcache实现tomcat7的session共享,目前生产环境用的不多了,但自己某个小需求用到,版本冲突好几次,分享给大家,这3个包复制到tomcat的 lib目录下 还有两个包需要 maven引入自己的项目中 <!-- memcache 管理 session --> <dependency> <groupId>de.javakaffee.msm</groupId> <artifactId>msm-kryo-serializer</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>de.javakaffee</groupId> <artifactId>kryo-serializers</artifactId> <version>0.9</version> </dependency> 立即下载

相关推荐

tomcat7 通过memcache 实现 session共享依赖包

通过memcache实现tomcat7的session共享,目前生产环境用的不多了,但自己某个小需求用到,版本冲突好几次,分享给大家,说明需要把jar包复制到tomcat下面的lib目录

Tomcat通过Memcached实现session共享的完整部署记录

  对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块。要实现这一点, 大体上有两种方式:一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据;另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Se...

weixin_33875564的博客 578

集群环境下memcache解决session共享

tomcat8的集群环境下memcache解决session共享的jar包。

使用memcache 管理session

一、下载下列几个 Jar包http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0....

翻过这座山,就到菩提洞了 190

Squareline Studio + LVGL实战:从Figma设计到MCU屏幕的UI开发一条龙(避坑中文显示)

本文详细介绍了使用Squareline Studio和LVGL实现从Figma设计到MCU屏幕UI开发的全流程,重点解决中文显示等常见问题。通过设计工具链搭建、设计稿转换、LVGL工程集成及性能优化等步骤,帮助开发者高效完成嵌入式GUI开发,提升开发效率。

weixin_29246195的博客 583

引入高分辨率特征层保持的YOLOv10小目标增强:从思路到完整实现

大概两个月前,我在做一个无人机航拍图像检测的项目,目标是识别图片里的小型车辆和行人。用的数据集是VisDrone,相信做小目标检测的朋友对这个数据集都不陌生。一开始我直接跑了官方YOLOv10的代码,结果在tiny vehicle这一类上mAP50只有可怜的0.312。那些小目标基本就是几个像素点,YOLOv10在三次下采样之后,这些小目标的特征几乎就消失不见了。 后来我折腾了大概三周,尝试了各种方法:改anchor、调loss权重、做数据增强、甚至考虑过换检测头。最后发现最有效的还是引入一个高分辨率特征

YOLO 49

tomcat & memcache

tomcat and memcache sticky sessions粘性会话: 安装了MSM的tomcat会优先使用本机内存保存session,当一个请求结束后,MSM会把session发送到memcached节点上存放以作备份,第二次请求时,如果本地有session就直接返回,第二次请求结束,把session修改后的信息更新到后端的memcached服务器,以这样的方式来保持本地的sessi...

草根IT的博客 532

一文掌握 MongoDB 详细安装与配置(Windows / Linux / macOS 全平台)

本文详细介绍了MongoDB社区版7.0+在Windows、Linux和macOS三大操作系统上的完整安装、配置与安全加固流程。主要内容包括:各平台推荐安装方式(Windows使用MSI安装包、Linux通过官方仓库、macOS通过Homebrew)、基本配置参数说明、服务启动方法以及关键安全措施(如创建管理员用户和启用身份验证)。文章还提供了系统最低要求、下载地址、数据目录设置建议以及生产环境使用注意事项,适合开发、测试及生产环境部署参考。

数据知道的博客 6709

使用Memcache实现Tomcat分布式session共享

•Session一致性解决方案 – 1、session复制 – tomcat 本身带有复制session的功能。 – 2、共享session – 需要专门管理session的软件, – memcached 缓存服务,可以和tomcat整合,帮助tomcat共享管理session。 •安装memcached –1、安装libevent –2、安装memcached ...

qq_22049773的博客 299

论文阅读 AIED 2024 Coding with AI: How Are Tools Like ChatGPT Being Used by Students in Foundational Pro

该论文题为《Coding with AI: How Are Tools Like ChatGPT Being Used by Students in Foundational Programming Courses》,由美国犹他州立大学的 Aashish Ghimire 与 John Edwards 共同撰写,发表于人工智能与教育领域顶级会议。

CSPhD-winston的博客 307

用一个稳定的 Deep Link,直接打开 SAP CRM WebClient 里的 Sales Order 创建界面

本文详细介绍了如何在SAP CRM WebClient UI中构建直接进入销售订单创建页面的Deep Link URL。关键步骤包括:1) 通过SMICM和SICF确认系统入口路径及端口;2) 使用BSP_DLC_SDESIGN或F2功能获取Sales Order的对象类型;3) 确保创建动作(D)能正确映射到目标页面;4) 按规范拼接包含sap-client、saprole等参数的完整URL。文章还提供了ABAP代码示例自动生成URL,并提醒注意浏览器缓存问题。通过这种标准化导航方式,可以实现稳定的页面直

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 209

tomcat+memcache结合实现session共享

普通的项目部署,如果使用一台tomcat,那么就不存在什么session共享的问题了,如果后台部署了多个tomcat,那么多个tomcat之间需要考虑这个问题,session共享。默认tomcat的session信息是存储在本机的,所以多个tomcat,就造成了session有可能不一致的情况,如果不考虑session共享,那么,我们的页面有可能是这样的。 webapp/ROOT/session...

feinifi的博客 2017

高通SDX35:SGMII接口PHY RTL8211FSI-CG驱动适配

高通SDX35 RTL8211F SGMII

不秃头的程序猿Gabriel的博客 785

Nginx+Tomcat+Memcache 实现session共享

Nginx + Tomcat + Memcache 实现session共享 1. Nginx 部署 1.上传源码包到服务器,解压安装 下载地址:http://nginx.org/en/download.html 2.安装依赖包 yum install pcre pcre-devel openssl openssl-devel gcc gcc-c++ -y 3.解压安装 tar zxvf ng...

weixin_34237596的博客 224

华为OD机试双机位C卷-用户入网定期复评(C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【用户入网定期复评】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【用户入网定期复评】。

qq_45776114的博客 834

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Memcache实现Session共享

前言 session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。 实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出 co...

SmallCatBaby的博客 476

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

tomcat集群下的session共享和负载均衡(memcache实现)

tomcat集群下的session共享和负载均衡(memcache实现)

qq_38152400的博客 915

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

linux Nginx配置篇:tomcat8+nginx+memcache集群session共享

1.安装memcache 1.1.先安装依赖库:yum -y install libevent 1.2因为有memcache的yum安装源,我这里直接使用yum安装,也可去官网下载源码包编辑安装。 1.2.1先查看memcache的安装源:yum list | grep memcache。如下图,有memcache的安装源。 1.2.2执行yum -y install memcac

Etyero的博客 2070

基于memcache处理tomcat的session

如果单台tomcat就不存在session的问题,如果是多台就需要考虑session共享的问题,或者nginx配置ip_hash可以解决session的问题,但是ip_hash的弊端是客户只能访问一台机器,那台机挂了就报错了不实用。因此这里我们采用memcache+tomcat+nginx来实现。 案例: 安装memache yum-y install memcached sy...

weixin_30678349的博客 108

java memcached 共享_tomcat利用memcache解决session共享

本文章来给各位同学介绍关于tomcat利用memcache解决session共享问题,希望此方法对各位同学有帮助。1.说明主要是利用memcached-session-manager开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对session的共享2.安装包下载memcache-session-manager在t...

weixin_35554306的博客 252

nginx+tomcat集群及使用memcache支持session共享 配置说明

Nginx+tomcat集群配置1        环境条件需要的环境条件有:jdk,tomcat,nginx等已安装好。本文是tomcat6版本2        配置nginx# cd /usr/local/nginx # vim conf/nginx.conf (编辑nginx的配置文件如下,其中绿色部分为修改的内容) #user nobody; worker_pro

雪峰的专栏 2178

Tomcat通过Memcached实现session共享

对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块。要实现这一点, 大体上有两种方式: 一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据; 另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据。 在集群系统下实现session统一的有如下几种方案: 1) 请求精确定位:session s

weixin_42073629的博客 1416

ngnix tomcat7 memcache集群session配置系列---环境配置

1.使用MemcachedBackupSessionManager 管理tomcatseesion,修改tomcat安装目录下的context.xml加入   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:127.0.0.1:11211"

canmengwuhen的专栏 1348

memcached实现tomcat集群的session共享

memcached实现tomcat集群的session共享 测试环境:windwos 64位系统 测试内容:Apache服务器做反向代理以实现集群的负载均衡,Tomcat做服务器集群,并用Memcach实现集群内的Session共享 测试工具:Apache2.2,Tomcat7.0.54,memcached 1.4   一.软件准备 首先是下载Apache2.2版本,可以去http

u011289922的博客 633
上一篇: Memcache学习笔记二:Memcache做Mybatis的缓存
下一篇: nginx代理服务器的搭建
motui
博客等级 码龄10年 84粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值