session共享几种方式
Session共享三种方式
1.nginx基于ip_hash负载均衡。
只需要更改nginx.conf配置文件。添加ip_hash就可以了。
缺点:1.由于ip_hash分配tomcat的时候用的是除法,所以新添加一台服务器会导致分配不到原来程序上,session会丢失。2.同一个公网ip访问时,ngnix会分到tomcat1上面,后面所有的同一公网下的内网路由访问都会分配到tomcat1上,还是会造成单台设备服务压力大3.单台服务器挂了后会导致session丢失。需要用户重新登录
2.服务器session复制
操作:修改tomcat配置文件
- 修改server.xml中的Cluster节点;
<Cluster className=”org.apache.catalina.ha.tcp.SimpleTcpCluster”>
- 修改应用web.xml,增加节点:<distributable />
优点:
对应用无侵入性,不需要修改代码
能适应各种负载均衡策略
服务器重启或宕机不会造成session丢失
安全性较高
缺点:
Session同步会有一定的延时
占用内网带宽资源
受制于内存资源,水平扩展能力差
序列化反序列化消耗CPU性能
3.session统一缓存
配置步骤:修改应用的配置文件
- 增加redis client和spring session的依赖;
- 修改web.xml,增加filter:springSessionRFilter;
- 修改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>
注意的坑:修改应用的配置文件
- 放置在session中的对象必须是可序列化的;
- springSessionRepositoryFilter的顺序要在其他获取session的filter的之前
- session的失效时间由redis节点失效时间决定,原有的配置不起作用
- 登出的时候,一定确保显示的调用了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共享几种方式相关推荐
- Action中取得request,session的四种方式
Action中取得request,session的四种方式 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象 ...
- LVS负载均衡下session共享的实现方式-持久化连接
之前简单介绍LVS负载均衡的高可用方案实施,下面详细说明LVS的session解决方案: LVS算法中,SH算法可以实现将同一客户端的请求总是发送给第一次指定的RS,除非该RS出现故障不能再提供服务. ...
- 管理分布式session的四种方式。
应用服务器的高可用架构设计最为理想的是服务无状态,但实际上业务总会有状态的,以session记录用户信息的例子来讲,未登入时,服务器没有记入用户信息的session访问网站都是以游客方式访问的,账号密 ...
- php设置session共享,PHP网站session共享几种方案
session共享问题原因于自己几个不同站之间需要实现session共享了,下面小编整理了一些session共享文章,希望对大家有帮助. 使用lvs或者nginx进行web的负载均衡时,一般都会遇到s ...
- 管理分布式session的四种方式
应用服务器的高可用架构设计最为理想的是服务无状态,但实际上业务总会有状态的,以session记录用户信息的例子来讲,未登入时,服务器没有记入用户信息的session访问网站都是以游客方式访问的,账号密 ...
- koa2 session mysql_koa2实现session的两种方式(基于Redis 和MySQL)
一.基于MySQL的实现方式 这种方式需要安装koa-session-minimal和koa-mysql-session两个依赖. 执行 npm install koa-session-minimal ...
- nginx 解决session共享问题(jvm-route)方式
1.下载安装jvm_route:http ://nginx-upstream-jvm-route.googlecode.com/svn/trunk/nginx-upstream-jvm-route-r ...
- android获取自定义属性,android 自定义控件中获取属性的三种方式(转)
第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值. (1)在xml文件中设置属性值 android:layout_width="f ...
- 转载:分布式Session共享:tomcat+memcached实现session共享
原文:http://www.cnblogs.com/notDog/p/5341219.html?utm_source=tuicool&utm_medium=referral 一.前言 本文主要 ...
最新文章
- 获取结构体中变量的偏移量
- Linux 虚拟内存和物理内存的理解【转】
- ubuntu系统php环境变量设置,Ubuntu系统环境变量详解
- 2021年春季学期-信号与系统-第三次作业参考答案-第六道题
- c#启动EXE文件(简单的)
- HH SaaS电商系统的商品系统设计
- 《Python Cookbook 3rd》笔记(2.9):将Unicode文本标准化
- How to Avoid Producing Legacy Code at the Speed of Typing
- 计算机图形学学习报告,计算机图形学学习报告.doc
- java 自定义登录态_java – 自定义HTTP状态代码
- 一文带你了解MultiBERT
- hdoj1102 Constructing Roads(Prime || Kruskal)
- Jenkins+Spring Boot构建部署
- selenium2 原理和常用api
- linux修改系统语言为中文
- 如何隐藏SDK中符号
- 2019软考总结-UML
- 什么是链接,为什么需要链接?
- Hexo编译静态资源生成博客图文教程
- JAVA中的scanner.Next和scanner.NextLine