如何将 session 共享存储到 redis 中

news2025/1/21 5:50:36

文章目录

  • 一. 分布式 session 登录
    • 1.1 什么是分布式?
    • 1.2 Session 共享
    • 1.3 为什么服务器 A 登录后,请求发到服务器 B,不认识该用户?
    • 1.4 共享存储
  • 二. Session 共享实现Redis
  • 三. 测试session共享
  • 四. cookie设置
    • 4.1 前端
    • 4.2 后端

一. 分布式 session 登录

1.1 什么是分布式?

分布式(Distributed)是指将计算、存储和处理任务分散到多台计算机或服务器上进行完成的一种计算模式。传统的集中式系统中,所有的计算和数据处理都依赖于中央服务器,而分布式系统则将任务分解为多个子任务,并将其分配给不同的计算机节点来并行处理。

分布式计算有以下几个主要的作用:

  1. 提高性能和可伸缩性:通过将任务分布到多个计算机上执行,分布式系统能够充分利用计算资源,提高系统的处理能力和性能,并且可以根据需要动态扩展系统规模。
  2. 提高可靠性和容错性:分布式系统通过数据冗余和任务复制等方式,可以在个别计算机节点发生故障时继续正常运行,提高了系统的可靠性和容错性。
  3. 实现共享资源:分布式系统能够将多个计算机节点的资源进行整合和共享,包括计算能力、存储空间、网络带宽等,从而提供更多的服务和功能。

分布式系统有广泛的应用领域,其中一些常见的分布式应用包括:

  1. **分布式数据库系统:**将数据存储在多个服务器上,实现数据的分布式存储、管理和查询,提高了数据库的性能和可伸缩性。
  2. **分布式文件系统:**将文件分散存储在多个服务器上,通过网络进行访问和共享,提供高性能和可靠的文件存储服务。
  3. **分布式计算系统:**将计算任务分配给多台计算机节点并行执行,例如云计算平台、大规模并行计算等。
  4. **分布式缓存系统:**将数据缓存在多个服务器上,加快数据的读取速度,降低网络负载,提高应用程序的性能。
  5. **分布式消息队列系统:**通过消息队列实现不同计算节点之间的通信和协调,提高系统的吞吐量和响应性能。
  6. **分布式搜索引擎:**将索引和搜索任务分布到多个服务器上,提供快速的搜索和检索功能。

分布式登录:就比如是有两台服务器,在这两台服务器部署了一样的服务,然后前端请求是通过负载均衡进行请求服务,这时你是不知道请求会落到那个服务器上, 所以你就不能在 Seesion 来做存信息(不能只保存到本地上)。如果你请求了服务器A,然后登陆信息放在了服务器A,下一次你的请求如果到了服务器B,那此时服务器B就没有你上一次的登录信息了,所以要使用中间件,也就是redis(Redission Java客户端)做这个分布式登录,这样不管你请求那个服务器都会有你的登录信息。

1.2 Session 共享

种 session 的时候注意范围,cookie.domain
比如两个域名:
aaa.jin.com
bbb.jin.com
如果要共享 cookie,可以种一个更高层的公共域名,比如 jin.com

1.3 为什么服务器 A 登录后,请求发到服务器 B,不认识该用户?

用户在 A 登录,所以 session(用户登录信息)存在了 A 上
结果请求 B 时,B 没有用户信息,所以不认识。

1.4 共享存储

解决方案:共享存储 ,而不是把数据放到单台服务器的内存中

如何共享存储?

  1. Redis(基于内存的 K / V 数据库)此处选择 Redis,因为用户信息读取 / 是否登录的判断极其频繁 ,Redis 基于内存,读写性能很高,简单的数据单机 qps 5w - 10w

  2. MySQL

  3. 文件服务器 ceph

二. Session 共享实现Redis

  1. 安装redis和管理工具quickredis

官网下载:Redis - The Real-time Data Platform

redis 管理工具 quick redis:https://quick123.net/

  1. 在springboot里引入redis,能够操作redis
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.6.4</version>
</dependency>
  1. 引入 spring-session 和 redis 的整合,使得自动将 session 存储到 redis 中:
 <!-- session-data-redis -->
        <!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>2.6.3</version>
        </dependency>

  1. 修改 spring-session 存储配置 spring.session.store-type。默认是 none,表示存储在单台服务器;store-type: redis,表示从 redis 读写 session。

三. 测试session共享

为了模拟多服务器,我们需要打包项目,在另一个端口启动,这里是8081
先打包,后在target目录下打开终端运行下面的代码

 java -jar .\user-center-backend-0.0.1-SNAPSHOT.jar --server.port=8081
  1. 运行,成功启动8080和8081端口的knife4j接口进行操作
  2. 先在8080端口登录并获取当前登录用户信息 http://localhost:8080/api/doc.html
  3. 在8081端口查看当前登录用户信息,也能查询到 http://localhost:8081/api/doc.html
  4. 使用QuickRedis查看session是否存入redis中

四. cookie设置

4.1 前端

4.2 后端

后端设置cookie允许在哪个域名下可携带。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2279666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化

Debezium日常分享系列之&#xff1a;对于从Oracle数据库进行快照的性能优化 源数据库Kafka Connect监控测试结果 源数据库 Oracle 19c&#xff0c;本地&#xff0c;CDB数据库主机的I/O带宽为6 GB/s&#xff0c;由此主机上运行的所有数据库共享临时表空间由42个文件组成&#x…

STM32 FreeROTS Tickless低功耗模式

低功耗模式简介 FreeRTOS 的 Tickless 模式是一种特殊的运行模式&#xff0c;用于最小化系统的时钟中断频率&#xff0c;以降低功耗。在 Tickless 模式下&#xff0c;系统只在有需要时才会启动时钟中断&#xff0c;而在无任务要运行时则完全进入休眠状态&#xff0c;从而降低功…

Redis - General - 未授权访问漏洞(用户配置问题)

0x01&#xff1a;产品简介 Redis&#xff08;Remote Dictionary Service&#xff0c;远程数据服务&#xff09;&#xff0c;是一款开源的基于内存的键值对存储系统&#xff0c;其主要被用作高性能缓存服务器使用&#xff08;比如作为消息中间件和用于 Session 共享&#xff09…

学习threejs,使用OrbitControls相机控制器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.OrbitControls 相机控…

SQL和MySQL以及DAX的日期表生成?数字型日期?将生成的日期表插入到临时表或者实体表中

几种生成日期表的方法 如何用SQL语句生成日期表呢&#xff1f; 如何用MySQL语句生成日期表呢&#xff1f; 如何用DAX语句生成日期表呢&#xff1f; 1. MySQL生成日期表 1.1 日期格式&#xff1a;yyyy-MM-dd 字符型 2024-01-02 -- 生成日期表 WITH RECURSIVE temp_dateTable …

C# 动态创建Label和ComboBox控件并修改Text

背景&#xff1a;在做项目的时候可能需要根据一定数量创建某些控件并修改其属性&#xff0c;本文以控件label、ConboBox控件进行动态创建。 程序运行前后的的Form动态图 代码如下&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; …

2025年编程语言热度分析:Python领跑,Go与Rust崛起

TIOBE Index&#xff08;TIOBE 编程语言指数&#xff09;是一个衡量编程语言流行度的排名系统。它通过分析多种搜索引擎、在线编程社区、技术论坛、问答网站&#xff08;如 Google、Bing、Yahoo、Wikipedia、Stack Overflow&#xff09;等的搜索和讨论数据&#xff0c;评估不同…

【从零开始入门unity游戏开发之——C#篇46】C#补充知识点——命名参数和可选参数

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

python学opencv|读取图像(三十九 )阈值处理Otsu方法

【1】引言 前序学习了5种阈值处理方法&#xff0c;包括(反)阈值处理、(反)零值处理和截断处理&#xff0c;还学习了一种自适应处理方法&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;三十三&#xff09;阈值处理-灰度图像-CSDN博客 python学o…

【Idea】编译Spring源码 read timeout 问题

Idea现在是大家工作中用的比较多的开发工具&#xff0c;尤其是做java开发的&#xff0c;那么做java开发&#xff0c;了解spring框架源码是提高自己技能水平的一个方式&#xff0c;所以会从spring 官网下载源码&#xff0c;导入到 Idea 工具并编译&#xff0c;但是发现build的时…

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21&#xff0c;如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新&#xff08;截止2024.9.13&#xff09;Oracle JDK操作记录 安装Gradle 下载Gradle&#xff0c;解压将其存放到资源java/env目录…

VMware Workstation Pro 17免费开放,再也不用到处找license了

VMware Workstation Pro 17免费开放啦 VMware Workstation Pro 17.6.2 版本介绍一、免费开放二、性能与稳定性提升三、重要问题修复1. Linux 快照崩溃问题解决2. Windows 11 主机优化3. Linux 内核兼容性增强 四、功能亮点1. 全新的性能优化2. 稳定性和可靠性增强3. 更友好的用…

寒假1.19

题解 web&#xff08;堆叠注入&#xff09;&#xff1a;[SUCTF 2019]EasySQL 参考wp&#xff1a;BUUCTF [SUCTF 2019]EasySQL1 writeup(详细版&#xff09;-CSDN博客 判断&#xff1a; 法一&#xff1a; 打开环境&#xff0c;有一个可交互的界面&#xff0c;随便输入几个字…

WebGL渲染3D高斯泼溅模型

WebGL渲染3D高斯泼溅模型 原文&#xff1a; GitHub - kishimisu/Gaussian-Splatting-WebGL: 3D Gaussian Splatting Renderer for WebGL 此外&#xff0c;一些基于webgpu&#xff0c;threejs渲染&#xff0c;以及和cesium集成的项目如下 GitHub - playcanvas/supersplat: 3D Ga…

前端:angular工程目录结构和相关文件学习

前端工程结构&#xff0c;angular&#xff1a; 环境变量文件说明&#xff1a; // The file contents for the current environment will overwrite these during build. // The build system defaults to the dev environment which uses environment.ts, but if you do // n…

Linux图形界面详解以及替换桌面程序方法[持续更新]

说明&#xff1a;本文章主要说明Linux图形界面的启动流程&#xff0c;以及使用自己的图形化应用替换桌面程序的方法&#xff0c;类似与安卓启动会启动Launcher&#xff0c;使用自己程序替换Launcher一样&#xff0c;实现应用独占系统&#xff0c;或者设计自己的桌面程序&#x…

异地IP属地代理业务解析:如何改变IP属地

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识符&#xff0c;不仅关乎设备间的通信&#xff0c;还涉及到用户的网络身份与位置信息。随着互联网的深入发展&#xff0c;异地IP属地代理业务逐渐走进大众视野&#xff0c;成为许多用户关注的话题。本文将详细解析异地IP属…

网络安全VS数据安全

关于网络安全和数据安全&#xff0c;我们常听到如下两种不同声音&#xff1a; 观点一&#xff1a;网络安全是数据安全的基础&#xff0c;把当年做网络安全的那一套用数据安全再做一遍。 观点二&#xff1a;数据安全如今普遍以为是网络安全的延伸&#xff0c;实际情况是忽略数据…

Android系统开发(一):AOSP 架构全解析:开源拥抱安卓未来

引言 当我们手握智能手机&#xff0c;流畅地滑动屏幕、切换应用、欣赏动画时&#xff0c;背后其实藏着一套庞大且精密的开源系统——Android AOSP&#xff08;Android Open Source Project&#xff09;。这套系统不仅是所有安卓设备的根基&#xff0c;也是系统开发者的终极 pl…

day02_ElasticSearch基础和SeaTunnel

文章目录 day02_ElasticSearch基础和SeaTunnel一、ElasticSearch基本介绍(了解)1、Elasticsearch应用方向2、ElasticSearch特点3、发展历史二、安装ElasticSearch(操作)1、安装ElasticSearch2、插件安装2.1 浏览器安装可视化插件2.2 PyCharm安装Elasticsearch插件三、Elast…