分布式session之redis解决方案实现

SpringSession - 分布式Session解决方案及SpringSession基本使用 分布式Session的几种解决方案 1、Session复制 Tomcat服务器互相同步session。 优点: web-server (Tomcat) 原生支持,只需要修改配置文件 缺点: 1、session同步需要数据传输,占用大量网络带宽,降低了服务器群的业务处理能力 2、任意一台web-server保存的数据都是所有web-server的sesdion总和,受到内存限制无法水平扩展更多的web-server 3、大型分布式集群情况下,由于所有web-server都全量保存数据,所以此方案不可取。 2 阅读详情

分布式session之redis解决方案实现

 

一、首先Session

 

Session 是客户端与服务器通讯会话技术, 比如浏览器登陆、记录整个浏览会话信息。session存放在服务器,关闭浏览器不会失效。

Session实现原理

客户对向服务器端发送请求后,Session 创建在服务器端,返回Sessionid给客户端浏览器保存在本地,当下次发送请求的时候,在请求头中传递sessionId获取对应的从服务器上获取对应的Sesison

 

 

请求过程: 

 服务器端接受到客户端请求,会创建一个session,使用响应头返回 sessionId给客户端。客户端获取到sessionId后,保存到本地。

下次请求:客户端将本地的sessionId通过请求头发送到服务器。服务器从请求头获取到对应的sessionId,使用sessionId在本地session内存中查询。

 

 

HttpSession session = request.getSession();  //默认创建一个session  默认值为true  没有找到对应的session 自动创建session

HttpSession session = request.getSession(false) //true的情况是 客户端使用对应的sessionId查询不到对应的session 会直接创建一个新的session  如果有的话直接覆盖之前的

                                                                               //false               客户端使用对应的sessionId查询不到对应的session   不会创建新的session

 

    session 包括 sessionId和sessionValue    

    session本身是临时的  token(令牌)与  sessionId很相似   保证了临时且唯一

    

玩下session:

前提需要安装nginx

配置如下:

 

host文件:c:\windows\system32\drivers\etc

访问 www.toov5.com时候 走的nginx的服务器域名 然后默认监听的端口号80。 进而通过配置upstream 负载均衡!

lz在玩时候,弄到了半夜,也没排查出来原因,妈的气死了! 地址写成了 127.0.0.1  

yml:

server:
  port: 8080  

pom:

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5.loveCode</groupId>
  <artifactId>loveCode</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<weixin-java-mp.version>2.8.0</weixin-java-mp.version>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.build.locales>zh_CN</project.build.locales>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> 
				<artifactId>jackson-databind</artifactId> </exclusion> </exclusions> -->
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.47</version>
		</dependency>
		<!-- Testing Dependencies -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<!--spring session 与redis应用基本环境配置,需要开启redis后才可以使用,不然启动Spring boot会报错 -->
		<!-- <dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
		</dependency> -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>

	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<maimClass>com.meiteedu.WxMpApplication</maimClass>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>

			</plugin>
		</plugins>
	</build>
  
</project>

  

服务器端代码:

package com.toov5.loveCode;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class TestSessionController {
    @Value("${server.port}")
    private String serverPort;

    @RequestMapping("/")
    public String index() {
        return serverPort;
    }

    // 创建session 会话
    @RequestMapping("/createSession")
    public String createSession(HttpServletRequest request, String nameValue) {
        // 默认 创建一个session,
        HttpSession session = request.getSession();
        System.out.println(
                "存入Session  sessionid:信息" + session.getId() + ",nameValue:" + nameValue + ",serverPort:" + serverPort);
        session.setAttribute("name", nameValue);
        return "success-" + serverPort;
    }

    // 获取session 会话
    @RequestMapping("/getSession")
    public Object getSession(HttpServletRequest request) {
        // 设置为true 情况下的时候,客户端使用对应的sessionid 查询不到对应的sesison 会直接创建一个新的session
        // 设置为false 情况下的时候,客户端使用对应的sessionid 查询不到对应的sesison 不 会直接创建一个新的session
        HttpSession session = request.getSession(true);
        if (session == null) {
            return serverPort + "  该服务器上没有存放对应的session值";
        }
        System.out.println("获取Session sessionid:信息" + session.getId() + "serverPort:" + serverPort);
        Object value = session.getAttribute("name");
        return serverPort + "-" + value;
    }

}

 

启动类:启动两次 端口号修改8080、 8081

package com.toov5.loveCode;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@EnableAutoConfiguration
@SpringBootApplication
public class AppSession {

    public static void main(String[] args) {
        SpringApplication.run(AppSession.class, args);
    }

}

运行结果:8080 和 8081来回切换 负载均衡

调用服务器端方法: fist 存放在8080

查询不到哦!

 

8081 没有  就创建新的session  覆盖原来的sessionId    true没有就创建   

下次 又去8080 又没有 又创建 来回折腾..............

此时:

修改false  没有时候不创建 

 

然后传入 value 然后继续轮训访问;

 

二、分布式Session

        

       1、直接使用cookie替代session 不安全(存客户端)

        2、Nginx的IP绑定  目的是同一个IP只能指定同一个机器访问(相当于没做集群了)

        3、 使用数据库(效率低)

        4、tomcat内置Session同步,通过广播可能产生延迟,占用带宽

        5、使用 Spring-Session框架,相当于把session缓存缓存到redis中 (  缓存框架,缓存Session的值 )

        6、可以使用token替代session功能。自定义令牌替代session

 

 Spring-Session 重写httpsession框架,将对应的值缓存到redis中,有点类似于一级、二级缓存。

 

必须要有的!

yml文件:

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5.loveCode</groupId>
  <artifactId>loveCode</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<weixin-java-mp.version>2.8.0</weixin-java-mp.version>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.build.locales>zh_CN</project.build.locales>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> 
				<artifactId>jackson-databind</artifactId> </exclusion> </exclusions> -->
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.47</version>
		</dependency>
		<!-- Testing Dependencies -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<!--spring session 与redis应用基本环境配置,需要开启redis后才可以使用,不然启动Spring boot会报错 -->
           <dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
		</dependency> 
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>

	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<maimClass>com.meiteedu.WxMpApplication</maimClass>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>

			</plugin>
		</plugins>
	</build>
  
</project>

 非常非常重要的:一定要jredis引入  同时这个对session提供了大力支持哈哈

 

yml 的redis配置文件:

server:
  port: 8080

redis:
  hostname: 192.168.91.3     
  port:  6379
  password:  123

  

 后台业务逻辑:

package com.toov5.loveCode;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class TestSessionController {
    @Value("${server.port}")
    private String serverPort;

    @RequestMapping("/")
    public String index() {
        return serverPort;
    }

    // 创建session 会话
    @RequestMapping("/createSession")
    public String createSession(HttpServletRequest request, String nameValue) {
        // 默认 创建一个session,
        HttpSession session = request.getSession();
        System.out.println(
                "存入Session  sessionid:信息" + session.getId() + ",nameValue:" + nameValue + ",serverPort:" + serverPort);
        session.setAttribute("name", nameValue);
        return "success-" + serverPort;
    }

    // 获取session 会话
    @RequestMapping("/getSession")
    public Object getSession(HttpServletRequest request) {
        // 设置为true 情况下的时候,客户端使用对应的sessionid 查询不到对应的sesison 会直接创建一个新的session
        // 设置为false 情况下的时候,客户端使用对应的sessionid 查询不到对应的sesison 不 会直接创建一个新的session
        HttpSession session = request.getSession(false);
        if (session == null) {
            return serverPort + "  该服务器上没有存放对应的session值";
        }
        System.out.println("获取Session sessionid:信息" + session.getId() + "serverPort:" + serverPort);
        Object value = session.getAttribute("name");
        return serverPort + "-" + value;
    }

}

配置:

package com.toov5.loveCode;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

//这个类用配置redis服务器的连接
//maxInactiveIntervalInSeconds为SpringSession的过期时间(单位:秒)
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
public class SessionConfig {

    // 冒号后的值为没有配置文件时,制动装载的默认值
    @Value("${redis.hostname:localhost}")
    String HostName;
    @Value("${redis.port:6379}")
    int Port;
    @Value("${redis.password}") 
    String password;
    
    @Bean
    public JedisConnectionFactory connectionFactory() {
        JedisConnectionFactory connection = new JedisConnectionFactory();
        connection.setPort(Port);
        connection.setHostName(HostName);
        connection.setPassword(password);
        return connection;
    }
}

初始化:

package com.toov5.loveCode;

import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;

//初始化Session配置
public class SessionInitializer extends AbstractHttpSessionApplicationInitializer{
    public SessionInitializer() {
        super(SessionConfig.class);
    }
}

启动类:

package com.toov5.loveCode;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@EnableAutoConfiguration
@SpringBootApplication
public class AppSession {

    public static void main(String[] args) {
        SpringApplication.run(AppSession.class, args);
    }

}

虽然是存放在8081,但是访问时候 都有哦~ 大家试试玩玩吧~~

 

 引入的jar包重写了 HttpSession类  去解决Session共享问题

而此时的:redis

控制台:

 

补充:

 Spring Boot 整合redis: 

 

server:
  port: 8080
spring:
  redis:
    database: 0   
    host:  192.168.91.3
    port:  6379
    password:  123
    jedis:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0
    timeout: 10000
redis:
  hostname: 192.168.91.3     
  port:  6379
  password:  123

  

 

spring-session-data-redis核心原理 本文介绍了分布式Session的实现原理及配置方法。Session通过在服务器端保存用户登录信息,使用sessionId进行鉴权。在微服务架构中,通过Redis实现分布式Session共享。核心配置使用@EnableRedisHttpSession注解,可设置过期时间、命名空间等参数。RedisHttpSessionConfiguration类负责读取配置并创建RedisIndexedSessionRepository来管理Session操作。通过引入相关依赖和配置,可实现跨服务的Session共享,解决分 阅读详情

相关推荐

基于Redis实现分布式Session共享的完整解决方案

比如你在 JWT 认证之后,想把用户 ID 写入 Session:@Component@Override记得注册:@Override@Bean// SSL 端口.useSsl().and().build();证书管理交给运维,开发只需开启.useSsl()即可。回顾整个旅程,我们完成了从“本地 Session”到“分布式会话中枢”的跃迁。维度改造前改造后架构模式有状态服务彻底无状态扩展能力扩容即断会话。

weixin_30633869的博客 827

session共享(redis实现)

大厂很多项目都是部署到多台服务器上,这些服务器在各个地区都存在,当我们访问服务时虽然执行的是同一个服务,但是可能是不同服务器运行的;在我学习项目时遇到这样一个登录情景,假设有如下三台服务器(如图),就使用session存放用户的登录信息,通过该信息可以判断用户是否登录:假设本次登录是通过服务器01执行的,那么这次的登录session信息就存放到了内存01中;但是当我再次访问时却是服务器02执行操作,而登录session信息却在内存01中,服务器02无法获取,所以它就会判断我没有登录,返回错误的信息…我们想要

YXXXYX的博客 1万+

session共享方案(tomcat8+redis共享session)

session共享方案(tomcat8+redis共享session) 一步一步详细指引

分布式和集群的Session共享问题

Session共享问题 首先在进入主题之前,我们先复习以下 Cookie 与 Session 何为 Cookie 1、Cookie是服务器通知客户端保存键值对的一种技术。同时客户端保存了Cookie之后,每次请求都会发送给服务器。每个Cookie的大小不能超过4kb。 2、Cookie 是保存在客户端的。 Cookie 的 工作机制: 服务器端返回 Cookie 信息给浏览器 Java 代码:response.addCookie(cookie 对象); HTTP 响应消息头:Set-Cook

Welcome,Everyone. 367

【技能---ubuntu20.04更换国内镜像源】

安装好ubuntu20.04后,在下载软件等安装包的时候,速度特别的慢,为此就想着更换一下镜像源,以此来增加下载的速度!!!下面是换源的具体流程!!!提示:以下是本篇文章正文内容,下面案例可供参考以上到这里就更换完软件源了,如有不足之处,请大家斧正!!!

fyc300的博客 1万+

一文带你了解SOA接口测试

了解汽车电子行业的人,近几年可能经常见到一个词“SOA”,那SOA具体是什么?作为测试人员应该要测试哪些内容呢?这篇文章就简单给大家介绍一下。SOA(Service Oriented Architecture)是一种面向服务的架构,最早应用于IT行业,虽然行业内对于SOA的定义没有一个统一的描述,但是总体而言,SOA把功能定义成为服务,服务带有明确的可调用接口,并可以通过网络调用。在汽车领域,对于高性能计算平台而言,为了实现域控制器以及区域控制器之间的互联互通和软硬分离、缩短开发周期等优势,也引入了SOA的

怿星科技的博客 7155

如何利用Redis实现分布式Session?

在web开发中,我们会把用户的登录信息存储在「session」里。而session是依赖于「cookie」的,即服务器创建session时会给它分配一个唯一的ID,并且在响应时创建一个cookie用于存储这个「sessionId」。当客户端收到这个cookie之后,就会自动保存这个sessionId,并且在下次访问时自动携带这个sessionId,届时服务器就可以通过这个sessionId得到与之对应的session,从而识别用户的身。如下图: 现在的互联网应用,基本都是采用分布式部署方式,即将应用程序部

SuZhan0711 4748

从零开始:PLUMED与GROMACS整合安装全攻略

本文详细介绍了如何从零开始整合安装PLUMED与GROMACS,包括系统环境检查、MPI配置、PLUMED编译安装、GROMACS补丁应用及常见问题解决方案。通过本教程,研究人员可以快速完成分子动力学模拟工具的整合安装,实现增强采样和自由能计算功能。

weixin_42520796的博客 292

分布式session共享的一点理解

session由tomcat管理,session可以理解为一个对象,我们可以通过request.getSession()获取session对象。可以调用setAttribute和getAttribute设置session的属性,例如cookie就是通过setAttribute放入session中的。 session的出现是为了用户登录成功后,进行其他操作的请求,请求被拦截器拦截后,通过校验sess...

hw120219的博客 249

手把手教你用Logisim搞定华科计组实验:单总线CPU硬布线控制器设计(含Excel自动生成电路技巧)

本文详细解析了如何使用Logisim完成华科计组实验中的单总线CPU硬布线控制器设计,特别分享了利用Excel自动生成电路逻辑的高效技巧。从实验准备、状态机表格填写到模块化构建和系统联调,提供全流程实战指导,帮助读者快速掌握计算机组成原理核心概念,大幅提升实验效率。

weixin_28744423的博客 321

rv1126如何切换720p和1080p

切换720p和1080p可以使用modetest,但是需要将这两种模式都添加到connector中去 添加一个新的mode到connector中去,其实内核中已经有相关接口了,需要做一些小改动。 1.不采用设备树的方式去配置,将720p和1080p的timing参数配置放在数组中。 2.这里的printer和设备树中的.compatible = "printer"一致。 3.将其添加到connector中去 static int panel_simple_get_fixed_modes(struct

weixin_42097108的博客 864

Redis实现Session共享

1.使用Redis实现Session共享 在微服务架构中,往往由多个微服务共同支撑前端请求,如果涉及到用户状态就需要考虑分布式Session管理问题,比如用户登录请求分发在服务器A,用户购买请求分发在服务器B,那么服务器就必须可以获取到用户的登录信息,否则就会影响正常交易,因此,在分布式架构或微服务架构下,必须保证一个应用服务器上保存Session后,其他应用服务器可以同步或共享这个Sessio...

ScholarTang的博客 2238

MinerU 系列教程 第六课:VLM 后端 - 视觉语言模型的力量

本篇教程将深入 VLM 后端的端到端推理架构。在上一课中我们看到 Pipeline 后端如何用 7+ 个专用模型组成流水线,本课将展示一种截然不同的设计理念 —— 用一个视觉语言模型(VLM)完成所有识别任务。你将了解 6 种推理引擎的选择与配置、MinerUClient 统一接口、二步提取策略,以及 VLM 原始输出如何转换为 MinerU 的标准 Middle JSON 格式。

weixin_43674738的博客 205

redis分布式php解决方案,浅析PHP分布式中Redis实现Session的方法

本文介绍的是PHP分布式中Redis实现Session的方法,下面话不多说,直接先来看两个方法是什么方法一:找到配置文件php.ini,修改为下面内容,保存并重启服务session.save_handler = redissession.save_path = "tcp://127.0.0.1:6379"方法二:直接在代码中加入以下内容:ini_set("session.save_handler"...

weixin_42153691的博客 123

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

redis分布式php解决方案,PHP 分布式中 Redis 实现 Session 共享

找到配置文件php.ini,修改为下面内容,保存并重启服务session.save_handler = redissession.save_path = "tcp://127.0.0.1:6379"或直接在代码中加入以下内容:ini_set("session.save_handler", "redis");ini_set("session.save_path", "tcp://127.0.0.1:...

weixin_33293858的博客 162

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【分布式】分布式Session共享解决方案

分布式Session一致性? 说白了就是服务器集群Session共享的问题 Session的作用? Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。 客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果通过这个sess...

疯一样的女子 213

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Springboot 开发 -- Redis实现分布式Session

在微服务架构和分布式系统中,会话管理(Session Management)成为了一个挑战。传统的基于Servlet容器的会话管理方式在分布式环境下无法有效工作,因为用户请求可能会被分发到不同的服务器上,导致会话数据无法共享。为了解决这个问题,Spring Session提供了一种基于外部存储(如Redis)的会话管理方式,使得会话数据可以在多个服务器之间共享。

dazhong2012的专栏 2427

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

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

叉叉哥的BLOG 7万+

基于Redis 的分布式 session 图解

给 SessionRepository 创建新的会话。sessionRepository 在 Redis 中创建新会话,保存会话的变更,更新Redis 中的会话数量, HMSET 更新 会话数量,重置过期时间。业务处理中可能发生修改 会话数量,如果有 SpringSessionFiliter 调用。获取会话, SessionRespository 查询 Redis 中的 会话数量,如果 该sessionID 存在,通过 该sessionID 从。创建完成后,返回 新的session 对象给。

web2u的博客 870

4种分布式session解决方案

4种分布式session解决方案 介绍 cookie和session的区别和联系 cookie是本地客户端用来存储少量数据信息的,保存在客户端,用户能够很容易的获取,安全性不高,存储的数据量小 session是服务器用来存储部分数据信息,保存在服务器,用户不容易获取,安全性高,储存的数据量相对大,存储在服务器,会占用一些服务器资源,但是对于它的优点来说,这个缺点可以忽略了 session有什么用 在一次客户端和服务器为之间的会话中,客户端(浏览器)向服务器发送请求,首先cookie会自动携带上次请求存储的数

qq_22494169的博客 3239

分布式-session

一.介绍session: session 是啥?浏览器有个 cookie,在一段时间内这个 cookie 都存在,然后每次发请求过来都带上一个特殊的 jsessionid cookie,就根据这个东西,在服务端可以维护一个对应的 session 域,里面可以放点数据。 一般的话只要你没关掉浏览器,cookie 还在,那么对应的那个 session 就在,但是如果 cookie 没了,session...

白天不懂夜的黑的博客 1741

8.redis解决分布式session问题 、redis在项目中难点

1

weixin_45780538的博客 1803
上一篇: 服务器操作常用
下一篇: 浏览器
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值