OJ在线评测系统 微服务技术入门 单体项目改造为微服务 用Redis改造单机分布式锁登录
单体项目改造为微服务
什么是微服务
服务:提供某类功能的代码
微服务:专注于提供某类特定功能的代码 而不是把所有的代码放到同一个项目里
会把一个大的项目按照一定的功能逻辑进行划分
拆分成多个子模块 每个子模块可以独立运行 独立负责一类功能
子模块之间相互调用 互不影响
微服务只是一个思想
微服务的实现技术
Spring Cloud
Spring Cloud Alibaba
Dubbo (DubboX)
RPC (GRPC TRPC)
本质上是通过HTTP 或者其他的网络协议进行通讯来实现的
服务之间的相互拆分 服务间的相互调用
Spring Cloud Alibaba
https://sca.aliyun.com/
微服务几个重要的实现概念
服务管理 服务调用

本质是在Spring Cloud的基础上
进行了增强
补充了一些额外的能力
根据阿里多年的业务沉淀做了一些额外的开发
Spring Cloud Gateways 网关
Nacos 服务注册和配置中心
Sentinel 熔断限流
Seata 分布式事务
RocketMQ 消息队列 削峰填谷
Docker 进行容器化部署
Kubernetes 使用k8s进行容器化部署
改造前 我们思考
从业务需求出发 首先分布式和单机有什么区别
我们之前的登录数据库数据是放在本台服务器上的
如果我们把我们的后端项目换到另一台服务器上 我们的数据就会消失
我们需要把用户登录功能需要改造为分布式登录
用到单机锁 我们要改造成分布式锁
有没有用到本地的缓存 改造为分布式缓存 redis
有没有用到事务 比如说操作多个表 多个库
改造单机分布式登录
好的,单机分布式登录是一个结合了单机和分布式系统特点的登录方式。我们可以从以下几个方面来理解:
-
定义
-
单机登录:指的是在单个服务器上进行用户认证和登录的过程,所有的用户信息和认证逻辑都集中在一台机器上。这种方式简单,适合小规模应用,但在负载增加时容易成为瓶颈。
-
分布式登录:指的是用户认证和登录过程分布在多个服务器上,可以通过负载均衡、微服务等架构来实现。这种方式可以处理更高的并发请求,并提高系统的可用性和可靠性。
-
应用场景
-
单机分布式登录通常用于需要在局部区域(如小型企业或特定功能模块)内实现简单的用户认证,而后端则可以与分布式系统对接,进行数据同步和共享。
-
例如,一个小型的电商网站可能最初只在一台服务器上进行用户登录,但随着业务扩展,可能逐步引入微服务架构,其他服务(如商品、订单)部署在不同的服务器上。
-
技术原理
-
Session管理:在单机环境中,用户登录后可以在服务器上创建Session,存储用户信息。而在分布式环境中,可能需要使用分布式缓存(如Redis)来管理Session,以确保不同服务器之间能共享用户状态。
-
数据库设计:单机时,用户信息存储在本地数据库中;分布式时,可能需要使用主从数据库、分片等技术来保证数据的一致性和可用性。
-
负载均衡:在分布式环境中,使用负载均衡器将用户请求分发到不同的服务器上,提高并发处理能力。
-
优缺点
-
优点:
-
扩展性:可以根据需求逐步扩展,添加更多的服务器。
-
可靠性:分布式架构可以避免单点故障,提高系统的可用性。
-
-
缺点:
-
复杂性:引入分布式架构后,系统设计和管理会变得复杂。
-
一致性问题:在分布式环境中,需要额外处理数据一致性和同步的问题。
-
总结
单机分布式登录是一种灵活的认证方案,可以在单机环境中实现基本的用户管理,同时具备向分布式架构演进的潜力。适合于逐步扩展的应用场景,能够平衡初期简单与后期复杂的需求。
单机分布式登录与Redis的关系主要体现在Session管理和数据存储上。以下是具体的关联点:
-
Session管理
在分布式登录架构中,用户的登录状态通常需要在多个服务器之间共享。Redis可以作为一个高效的分布式缓存来存储Session信息,确保不同服务器可以访问到相同的用户状态。
-
高性能
Redis是一个内存数据库,具有快速的数据读写能力,这使得它非常适合用来存储频繁访问的Session数据,能够显著提高用户登录的响应速度。
-
数据一致性
使用Redis可以帮助在分布式环境中保持数据的一致性。通过设置合适的过期时间,可以确保Session在一段时间后失效,从而避免因长时间未使用而造成的安全风险。
-
支持多种数据结构
Redis支持多种数据类型(如字符串、哈希、列表等),可以灵活地存储用户信息和相关数据,适应不同的业务需求。
-
分布式架构
在分布式系统中,Redis可以作为中央存储解决方案,帮助实现数据的快速访问和共享,适合高并发场景。
总之,Redis在单机分布式登录中起到了提升性能、管理Session和确保数据一致性的关键作用。
Session是指在用户与服务器之间保持的状态信息,用于跟踪用户的会话。它允许服务器在用户访问不同页面或进行多个请求时,识别用户并存储相关信息,比如登录状态、购物车内容等。Session通常通过一个唯一的标识符(如Session ID)来实现,服务器在创建Session时会为每个用户分配一个ID,并将相关数据保存在服务器端。这样,当用户再次发送请求时,服务器可以通过这个ID找到对应的Session数据,保持用户体验的一致性。
首先打开redis

我们在启动类里面打个注解
主类取消Redis自动配置的移除

补充依赖
<!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency>

分布式session

session:# todo 取消注释开启分布式 session(须先配置 Redis)store-type: redis# 30 天过期timeout: 2592000
使用redis-cli或者是redis管理工具 查看信息
相关文章:
OJ在线评测系统 微服务技术入门 单体项目改造为微服务 用Redis改造单机分布式锁登录
单体项目改造为微服务 什么是微服务 服务:提供某类功能的代码 微服务:专注于提供某类特定功能的代码 而不是把所有的代码放到同一个项目里 会把一个大的项目按照一定的功能逻辑进行划分 拆分成多个子模块 每个子模块可以独立运行 独立负责一类功能 …...
【机器学习】网络安全——异常检测与入侵防御系统
我的主页:2的n次方_ 随着全球互联网和数字基础设施的不断扩展,网络攻击的数量和复杂性都在显著增加。从传统的病毒和蠕虫攻击到现代复杂的高级持续性威胁(APT),网络攻击呈现出更加智能化和隐蔽化的趋势。面对这样的…...
【C语言】基础篇续
最大公约数HCF与最小公倍数LCM #include<stdio.h> int main(){int n1,n2,i,hcf,lcm;printf("Enter two numbers:");scanf("%d %d",&n1,&n2);for(i 1;i < n1 & i < n2;i){if(n1 % i 0 & n2 % i 0){hcf i;lcm (n1*n2)/hc…...
文件丢失一键找回,四大数据恢复免费版工具推荐!
丢失数据的情况虽然不经常出现,但一旦出现都会让人头疼不已,而这时候,要如何恢复丢失的数据呢?一款免费好用的数据恢复工具就派上用场了!接下来就为大家推荐几款好用的数据恢复工具! 福昕数据恢复 直达链…...
【学习笔记】手写一个简单的 Spring MVC
目录 一、什么是Spring MVC ? Spring 和 Spring MVC 的区别? Spring MVC 的运行流程? 二、实现步骤 1. DispatcherServlet 1. 创建一个中央分发器 拦截所有请求 测试 2. 接管 IOC 容器 1. 创建配置文件 2. 修改 web.xml 配置文件 …...
编程究竟难在哪里?
目录 一、将现实问题转化为代码二、应对需求的不断变化三、设计新算法的挑战结语 编程之难,常被概括为三个方面:首先,是将现实世界的问题转化为计算机语言的挑战;其次,是需求不断变化所带来的适应性难题;最…...
C#医学影像分析源码,医院影像中心PACS系统源码
医学影像系统源码,影像诊断系统PACS源码,C#语言,C/S架构的PACS系统全套源代码。 PACS系统是医院影像科室中应用的一种系统,主要用于获取、传输、存档和处理医学影像。它通过各种接口,如模拟、DICOM和网络,以…...
WooCommerce与wordpress是什么关系
WooCommerce与WordPress之间的关系非常紧密,因为WooCommerce实际上是一个为WordPress设计的插件。WordPress是一个内容管理系统(CMS),广泛用于创建各种类型的网站,包括博客、企业网站等。而WooCommerce则是一个免费且开源的电子商务插件&…...
Web常见的攻击方式及防御方法
Web常见的攻击方式及防御方法如下: 1. 跨站脚本(XSS) 攻击方式:恶意代码被注入到网页中,用户浏览时执行该代码,导致窃取用户信息、伪造页面等。防御: 对用户输入严格过滤、转义。使用安全的编…...
基于STM32的超声波测距仪设计
引言 本项目将基于STM32微控制器设计一个超声波测距仪,通过超声波传感器实现距离测量,并将结果显示在液晶屏上。该项目展示了STM32微控制器与超声波传感器、LCD显示器的接口通信,以及信号处理和距离计算的过程。 环境准备 1. 硬件设备 ST…...
【数据库】Java 集成mongodb— MongoTemplate 详解
MongoTemplate 是 Spring Data MongoDB 提供的核心类,用于简化与 MongoDB 数据库的交互。它封装了许多常见的数据库操作,使开发者能够轻松执行 CRUD(创建、读取、更新、删除)操作,处理复杂查询和聚合等。本文将详细介绍…...
腿和脚的动作透露出你的内心“世界”
离大脑越近的部位越容易受大脑控制,而腿脚离大脑最远,想要在第一时间进行伪装是很难的。当危险靠近时,我们的双腿会自然而然地进入戒备状态,产生一些不自觉的动作。因此,观察一个人的腿脚,可以帮助我们了解…...
Oracle架构之用户,权限,角色讲解
文章目录 1 用户1.1 简介1.1.1 定义1.1.2 用户相关信息1.1.2.1 用户默认表空间1.1.2.2 用户临时表空间1.1.2.3 用户资源文件1.1.2.4 用户表空间限额1.1.2.5 用户管理有关的数据字典 1.1.3 用户、模式、模式对象1.1.4 实例模式 SCOTT1.1.5 各个角色区别 1.2 用户管理1.2.1 创建用…...
Unity_Obfuscator Pro代码混淆工具_学习日志
Unity_Obfuscator Pro代码混淆工具_学习日志 切勿将密码或 API 密钥存储在您附带的应用程序内。 混淆后的热更新暂时没有想到怎么办 Obfuscator 文档 https://docs.guardingpearsoftware.com/manual/Obfuscator/Description.html商店链接Obfuscator Pro(大约$70&a…...
已解决:org.springframework.web.HttpMediaTypeNotAcceptableException
文章目录 写在前面问题描述报错原因分析: 解决思路解决办法1. 确保客户端请求的 Accept 头正确2. 修改 Controller 方法的 produces 参数3. 配置合适的消息转换器4. 检查 Spring 配置中的媒体类型5. 其他解决方案 总结 写在前面 在开发过程中,Spring 框…...
C/C++简单编译原理
我们写的头文件和.cpp文件究竟是如何在电脑中运行的? 先明确几个文件类型: 1、头文件(.h .hpp) 第三方头文件、系统头文件、自编头文件…… 2、编译单位(.cpp .c cu) 自己写的脚本文件 3、目标文件&…...
文件处理不再难:带你轻松攻克C语言文件操作
嘿嘿,家人们,今天咱们来详细剖析C语言中的文件操作,好啦,废话不多讲,开干! 目录 1:为什么使用文件 2:文件的概念 2.1:程序文件 2.2:数据文件 2.3:文件名 3:二进制文件与文本文件 4:文件的打开与关闭 4.1:流与标准流 4.1.1:流 4.1.2:标准流 4.2:文件指针 4.3:文件的…...
Unity3D 单例模式
Unity3D 泛型单例 单例模式 单例模式是一种创建型设计模式,能够保证一个类只有一个实例,提供访问实例的全局节点。 通常会把一些管理类设置成单例,例如 GameManager、UIManager 等,可以很方便地使用这些管理类单例,…...
解析TMalign文本文件中的转换矩阵
TM-align 将两个蛋白质结构通过旋转和位移对齐后: TMalign test1.pdb test2.pdb -m mtx.txt 输出转换矩阵,文件内容为: ------ The rotation matrix to rotate Chain_1 to Chain_2 ------ m t[m] u[m][0] u[…...
vue.js组建开发
Vue.js是一个用于构建用户界面的渐进式JavaScript框架。它采用了组件化的开发方式,将UI界面拆分成多个可重用的组件,通过组合这些组件来构建复杂的应用程序。在本文中,我们将探讨Vue.js组件开发的相关概念和技术。 一、组件化开发的优势 组件…...
告别手改脚本!用CANoe Panel面板做个变量控制台,测试效率翻倍
告别手改脚本!用CANoe Panel面板打造智能变量控制台 在车载网络测试领域,效率提升往往隐藏在那些被忽视的日常操作细节中。当测试工程师频繁打开CAPL脚本修改超时阈值、调整诊断ID或切换测试模式时,不仅打断了工作流,更在团队协作…...
AI量化交易框架解析:从架构设计到实战部署
1. 项目概述:一个AI驱动的加密资产对冲基金框架最近在GitHub上看到一个挺有意思的项目,叫“ai-hedge-fund-crypto”。光看名字,就能感受到一股浓浓的“量化AI加密”的混合气息。这其实是一个开源框架,旨在帮助开发者或量化研究员&…...
碧蓝航线自动化脚本:让游戏管理变得轻松高效
碧蓝航线自动化脚本:让游戏管理变得轻松高效 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 你是否厌倦了每天重…...
qmcdump:专业解决QQ音乐加密音频格式兼容性问题
qmcdump:专业解决QQ音乐加密音频格式兼容性问题 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 在数字音乐时…...
Go语言实现跨平台系统更新检查器:自动化运维与安全监控实践
1. 项目概述:一个被低估的系统运维“哨兵”在服务器和桌面系统的日常运维中,有一个场景大家一定不陌生:某天,你管理的服务器突然因为一个已知漏洞被攻击,事后排查发现,相关的安全补丁其实在几周前就已经发布…...
Ruby LLM框架:为Ruby开发者打造的大语言模型应用开发工具包
1. 项目概述:一个为Ruby语言量身打造的LLM应用框架如果你是一名Ruby开发者,最近被各种大语言模型(LLM)的应用搞得心痒痒,但看着满世界的Python库和框架感到无从下手,那么crmne/ruby_llm这个项目可能就是你在…...
嵌入式测试学习第 12天:串口基础概念:UART、波特率、数据位、校验位
串口基础概念:UART、波特率、数据位、校验位一、串口整体基础概念1、什么是UART串口2、串口实物真实图片① 主板/开发板排针串口② USB转TTL串口模块③ 老式DB9工业串口公头母头二、串口四大核心参数1、波特率概念常用标准固定值通俗理解测试场景2、数据位概念作用3…...
AI控制协议标准(ACPS):构建智能体与工具交互的通用语言
1. 项目概述与核心价值最近在开源社区里,一个名为“AI-Control-Protocol-Standard”的项目引起了我的注意。这个由DaibinThink发起的项目,名字听起来就很有分量——“AI控制协议标准”。乍一看,你可能觉得这又是一个关于AI模型如何被调用的技…...
基于RAG与智能体技术构建专业客服AI:从知识注入到流程执行
1. 项目概述:一个面向客服场景的AI智能体指南最近在GitHub上看到一个挺有意思的项目,叫mrqhocungdungai-vn/hermes-cskh-guide。从名字就能猜个大概,这是一个关于“Hermes”的客服(CSKH)指南,而且看起来是越…...
系统管理员AI编程实战:基于Claude的运维自动化脚本开发指南
1. 项目概述:一个面向系统管理员的Claude-Code学习与实践仓库最近在整理自己的技术栈时,发现很多系统管理员同行对如何将大型语言模型(LLM)高效地融入日常运维工作流感到困惑。大家普遍觉得这些AI工具很强大,但具体到写…...
