Session共享三种方式

1.nginx基于ip_hash负载均衡。

只需要更改nginx.conf配置文件。添加ip_hash就可以了。

缺点:1.由于ip_hash分配tomcat的时候用的是除法,所以新添加一台服务器会导致分配不到原来程序上,session会丢失。2.同一个公网ip访问时,ngnix会分到tomcat1上面,后面所有的同一公网下的内网路由访问都会分配到tomcat1上,还是会造成单台设备服务压力大3.单台服务器挂了后会导致session丢失。需要用户重新登录

2.服务器session复制

操作:修改tomcat配置文件

  1. 修改server.xml中的Cluster节点;

<Cluster className=”org.apache.catalina.ha.tcp.SimpleTcpCluster”>

  1. 修改应用web.xml,增加节点:<distributable />

优点:

对应用无侵入性,不需要修改代码

能适应各种负载均衡策略

服务器重启或宕机不会造成session丢失

安全性较高

缺点:

Session同步会有一定的延时

占用内网带宽资源

受制于内存资源,水平扩展能力差

序列化反序列化消耗CPU性能

3.session统一缓存

配置步骤:修改应用的配置文件

  1. 增加redis client和spring session的依赖;
  2. 修改web.xml,增加filter:springSessionRFilter;
  3. 修改spring配置文件,在容器中注入spring session和redis相关的bean;

1.

<!--spring session的依赖 -->

<dependency>

<groupId>org.springframework.session</groupId>

<artifactId>spring-session-data-redis</artifactId>

<version>1.2.1.RELEASE</version>

</dependency>

<!—redis client的依赖 -->

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>2.8.1</version>

</dependency>

2.

<filter>

<filter-name>springSessionRepositoryFilter</filter-name>

<filter-class>

org.springframework.web.filter.DelegatingFilterProxy

</filter-class>

</filter>

<filter-mapping>

<filter-name>springSessionRepositoryFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

3.

<bean id="redisHttpSessionConfiguration"

class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" scope="singleton">

<property name="maxInactiveIntervalInSeconds" value="600" />

</bean>

<bean id=”jedisPoolConfig” class=”redis.clients.jedis.JedisPoolConfig”>

<property name=”maxTotal” value=”100” />

<property name=”maxIdle” value=”10”/>

</bean>

<bean id=”jedisCOnnectionFactory”

Class=”org.springframework.data.redis.connection.jedis.JedisConnectionFactory” destroy-method=”destroy”>

<property name=”hostName” value=”localhost” />

<property name=”port” value=”6379” />

<property name=”timeout” value=”3000” />

<property name=”usePool” value=”true” />

<property name=”poolConfig” ref=”jedisPoolConfig” />

</bean>

注意的坑:修改应用的配置文件

  1. 放置在session中的对象必须是可序列化的;
  2. springSessionRepositoryFilter的顺序要在其他获取session的filter的之前
  3. session的失效时间由redis节点失效时间决定,原有的配置不起作用
  4. 登出的时候,一定确保显示的调用了session.invalidate();

Session统一缓存

优点:

能使用各种负载均衡策略

服务器重启或宕机不会造成session丢失

安全性较高

扩展能力强

适合集群数量大时使用

缺点:

对应用有入侵,需要增加相关配置

增加一次网络开销,用户体验降低

序列化反序列化消耗CPU性能

4.redis+tomcat实现session共享

1.tomcat的lib下引入jar包:commons-pool2-2.0.jar、jedis-2.5.2.jar、tomcat-redis-session-manager1.2.jar

2.修改tomcat的conf下的context.xml

3.tomcat7和tomcat8区别在tomcat-redis-session-manager这个jar包上

jar下载地址:

tomcat7:链接:https://pan.baidu.com/s/1ITUDNDhpp3hl3nXEE5EW9w 
提取码:amcn

tomcat8:链接:https://pan.baidu.com/s/1fwVU8uaKtAkJQEgPqzx_FQ 
提取码:j1ax

总结:

Session统一缓存适应于:

大型分布式环境下首选

专业的工具用在专业的地方

可扩展性和健壮性强

基于ip_hash负载均衡

较大分布式环境下可选

对应无侵入性

配置简单,可扩展性强

服务器session复制

小型分布式环境首选

对应用无侵入性

健壮性和用户体验较好

session共享几种方式相关推荐

  1. Action中取得request,session的四种方式

    Action中取得request,session的四种方式 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象 ...

  2. LVS负载均衡下session共享的实现方式-持久化连接

    之前简单介绍LVS负载均衡的高可用方案实施,下面详细说明LVS的session解决方案: LVS算法中,SH算法可以实现将同一客户端的请求总是发送给第一次指定的RS,除非该RS出现故障不能再提供服务. ...

  3. 管理分布式session的四种方式。

    应用服务器的高可用架构设计最为理想的是服务无状态,但实际上业务总会有状态的,以session记录用户信息的例子来讲,未登入时,服务器没有记入用户信息的session访问网站都是以游客方式访问的,账号密 ...

  4. php设置session共享,PHP网站session共享几种方案

    session共享问题原因于自己几个不同站之间需要实现session共享了,下面小编整理了一些session共享文章,希望对大家有帮助. 使用lvs或者nginx进行web的负载均衡时,一般都会遇到s ...

  5. 管理分布式session的四种方式

    应用服务器的高可用架构设计最为理想的是服务无状态,但实际上业务总会有状态的,以session记录用户信息的例子来讲,未登入时,服务器没有记入用户信息的session访问网站都是以游客方式访问的,账号密 ...

  6. koa2 session mysql_koa2实现session的两种方式(基于Redis 和MySQL)

    一.基于MySQL的实现方式 这种方式需要安装koa-session-minimal和koa-mysql-session两个依赖. 执行 npm install koa-session-minimal ...

  7. nginx 解决session共享问题(jvm-route)方式

    1.下载安装jvm_route:http ://nginx-upstream-jvm-route.googlecode.com/svn/trunk/nginx-upstream-jvm-route-r ...

  8. android获取自定义属性,android 自定义控件中获取属性的三种方式(转)

    第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值. (1)在xml文件中设置属性值 android:layout_width="f ...

  9. 转载:分布式Session共享:tomcat+memcached实现session共享

    原文:http://www.cnblogs.com/notDog/p/5341219.html?utm_source=tuicool&utm_medium=referral 一.前言 本文主要 ...

最新文章

  1. 获取结构体中变量的偏移量
  2. Linux 虚拟内存和物理内存的理解【转】
  3. ubuntu系统php环境变量设置,Ubuntu系统环境变量详解
  4. 2021年春季学期-信号与系统-第三次作业参考答案-第六道题
  5. c#启动EXE文件(简单的)
  6. HH SaaS电商系统的商品系统设计
  7. 《Python Cookbook 3rd》笔记(2.9):将Unicode文本标准化
  8. How to Avoid Producing Legacy Code at the Speed of Typing
  9. 计算机图形学学习报告,计算机图形学学习报告.doc
  10. java 自定义登录态_java – 自定义HTTP状态代码
  11. 一文带你了解MultiBERT
  12. hdoj1102 Constructing Roads(Prime || Kruskal)
  13. Jenkins+Spring Boot构建部署
  14. selenium2 原理和常用api
  15. linux修改系统语言为中文
  16. 如何隐藏SDK中符号
  17. 2019软考总结-UML
  18. 什么是链接,为什么需要链接?
  19. Hexo编译静态资源生成博客图文教程
  20. JAVA中的scanner.Next和scanner.NextLine

热门文章

  1. JAVA项目报表poi,POI报表
  2. 此URL不支持Http方法POST
  3. IMBG120R090M1H D2Pak,IMW120R040M1H 1200V MOSFET特点
  4. 【风景园林大模型战车系列】之画五彩斑斓的黑,毛坯变精装,手绘作品秒渲染效果图魔法
  5. 数据结构之复杂链表复制
  6. 五分钟搭建django-admin-honey简单蜜罐应用
  7. 又是受罪的一天,哎~
  8. HTTP请求行、请求头、请求体解
  9. 正则表达式基础,表示方法
  10. 使用Python的requests库作接口测试——对HPPT动词的支持