spring+redis+nginx 实现分布式session共享

1,spring 必须是4.3以上版本的

2,maven配置

  添加两个重要的依赖

  

<dependency>    <groupId>org.springframework.session</groupId>    <artifactId>spring-session-data-redis</artifactId>    <version>1.2.2.RELEASE</version>    <type>pom</type></dependency>
<dependency>    <groupId>redis.clients</groupId>    <artifactId>jedis</artifactId>    <version>2.9.0</version></dependency>

3,spring.xml  文件配置
<!--分布式session--><bean id="redisHttpSessionConfiguration"      class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">    <property name="maxInactiveIntervalInSeconds" value="600"/></bean>

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">    <property name="maxTotal" value="${jedis.pool.maxTotal}" />    <property name="maxIdle" value="${jedis.pool.maxIdle}" /></bean>

<bean id="jedisConnectionFactory"      class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">    <property name="hostName" value="${redis.ip}"/>    <property name="port" value="${redis.port}"/>    <property name="password" value="${redis.password}" />    <property name="timeout" value="3000"/>    <property name="usePool" value="true"/>    <property name="poolConfig" ref="jedisPoolConfig"/></bean>

4,redis配置
#redis配置#*****************jedis\u8FDE\u63A5\u53C2\u6570\u8BBE\u7F6E*********************##redis\u670D\u52A1\u5668ip ##redis.ip=47.92.128.123redis.ip=192.168.9.168#redis\u670D\u52A1\u5668\u7AEF\u53E3\u53F7#redis.port=6379redis.password=123456#************************jedis\u6C60\u53C2\u6570\u8BBE\u7F6E*******************##jedis\u7684\u6700\u5927\u5206\u914D\u5BF9\u8C61#jedis.pool.maxActive=3000#jedis\u6700\u5927\u4FDD\u5B58idel\u72B6\u6001\u5BF9\u8C61\u6570 #jedis.pool.maxIdle=1000#jedis\u6C60\u6CA1\u6709\u5BF9\u8C61\u8FD4\u56DE\u65F6\uFF0C\u6700\u5927\u7B49\u5F85\u65F6\u95F4 #jedis.pool.maxTotal=1500#jedis\u8C03\u7528borrowObject\u65B9\u6CD5\u65F6\uFF0C\u662F\u5426\u8FDB\u884C\u6709\u6548\u68C0\u67E5#jedis.pool.testOnBorrow=true#jedis\u8C03\u7528returnObject\u65B9\u6CD5\u65F6\uFF0C\u662F\u5426\u8FDB\u884C\u6709\u6548\u68C0\u67E5 #jedis.pool.testOnReturn=true

5,web.xml  配置
<!--spring  redis  共享session 拦截器--><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>

经过以上配置,就可以使用了要想实现session共享还需要访问的时候域名一致,如果域名不一致是不能够共享的例如  :  负载均衡两台服务器A: 192.168.1.101 : 8080B: 192.168.1.102 : 8081在浏览器中分别用IP地址去访问两台服务器下的服务是不会实现session共享的只有通过nginx做负载均衡两台服务器绑定同一域名如   www.test.com通过域名去访问这时不管请求分发到哪一台机器都可以实现session的共享
时间: 2024-10-22 08:25:14

spring+redis+nginx 实现分布式session共享的相关文章

nginx+tomcat+redis负载均衡及session共享

概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.org/download/nginx-1.6.0.tar.gz 负载均衡 commons-pool-2-2.4.2.jar http://mirrors.hust.edu.cn/apache//commons/pool/binaries/commons-pool2-2.4.2-bin.tar.gz j

分布式session共享

一.前言 为什么会出现session共享问题? 客户端与服务器交互时会产生唯一的sessionid用于标记用户,但是在分布式架构中,如果还是采用 session 的方式,用户发起请求,通过 nginx 做请求转发时,并不知道是转发到服务器1还是服务器2,所以就会出现session共享问题. 关于分布式 session 共享有两种解决方式,使用 spring-session 框架或者是使用 token 替代 session. 今天主要记录使用 spring-session 框架解决 session

CentOS7 下 Nginx + Tomcat 实现 Session 共享

在之情的文章中搭建的 centos7 + tomcat + nginx 的环境的基础上, 使用 redis 实现 tomcat 的 session 共享的问题. 一 : 安装 Redis 安装 gcc: yum install -y gcc-c++ 使用 FTP 服务器上传安装包,解压上传的 redis 的包 tar -zxvf redis-3.0.0.tar.gz 进入解压目录 redis-3.0.0 执行 make PREFIX=/usr/local/redis install 把 redi

nginx六 之Session共享

背景 使用反向代理服务器会引起session sticky(会话粘贴),意思是用户发起的多次请求被分发到多台服务器,请求的session没有被共享,解决这个问题的方案有很多种,在考虑性  能.稳定以及自身架构的基础上,决定采取redis缓存会话实现session共享. 配置 tomcat配置 1.修改context.xml,在<Context>节点末尾内添加如下配置: <Valve className="com.radiadesign.catalina.session.Redi

Nginx + Memcached 实现Session共享的负载均衡

session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Session就在不同发服务器上,A记住了用户的登录状态,可是下一次用户请求被分配到B去了怎么办?不可能让用户再登陆一次.所以要实现session共享. 方法 1.ip_hash,这是Nginx的轮询方法,用户登录站点时,就会一直在这台服务器上就不存在Session的问题 优点:不需要采用任何处理: 缺

Nginx + tomcat + Memcached(session共享)

Nginx + tomcat + Memcached(session共享) 实验拓扑 nginx   实现负载 tomcat   实现web功能 memcached 实现会话共享 安装Nginx [[email protected] ~]# yum -y install pcre pcre-devel [[email protected] ~]# tar -zxvf nginx-1.0.5.tar.gz [[email protected] ~]# cd nginx-1.0.5 [[email 

Spring Session + Redis实现分布式Session共享

通常情况下,Tomcat.Jetty等Servlet容器,会默认将Session保存在内存中.如果是单个服务器实例的应用,将Session保存在服务器内存中是一个非常好的方案.但是这种方案有一个缺点,就是不利于扩展. 目前越来越多的应用采用分布式部署,用于实现高可用性和负载均衡等.那么问题来了,如果将同一个应用部署在多个服务器上通过负载均衡对外提供访问,如何实现Session共享? 实际上实现Session共享的方案很多,其中一种常用的就是使用Tomcat.Jetty等服务器提供的Session

nginx+tomcat集群+redis(memcache)session共享!

nginx+tomcat+redissession共享 常用保持session的方式: 1.一些代理(比如nginxIP_hash) 1.使用数据库来存储Session 2.使用Cookie来存储Session                       3.使用Redis来存储Sesssion(memcache也可以) --   环境: 192.168.1.220   nginx    centos6.6   端口:80 版本:1.9.2 192.168.1.224   tomcatA  ce

nginx+tomcat+redis负载均衡,实现session共享

实验环境: 系统: centos 7.4 3.10.0-327.el7.x86_64 docker: 18.03.0-ce docker-compose:docker-compose version 1.21.0 redis: 4.0.9 nginx: 1.12.2 tomcat:8.5.30 jdk:1.8.161 基础理论 session 统一方案:1.单机的session会话保持机制如nginx的ip-hash,如果单个机器下线,那么session将会全部丢失2.session共享,如to