当前位置: 首页 > news >正文

Seata 分布式事务

1. 分布式事务介绍

传统单体应用场景下,系统的数据保存在一个数据库实例中,通常场景的关系数据库都能自动提供事务保证,并且这种情况下的事务称为本地事务,能保证原子性、一致性、隔离性、持久性(ACID 特性)。
本地事务
@Transational
大多数场景下,我们的应用都只需要操作单一的数据库,这种情况下的事务称之为本地事务 (Local Transaction)。本地事务的ACID特性是数据库直接提供支持。

分布式事务典型场景
当下互联网发展如火如荼,绝大部分公司都进行了数据库拆分和服务化 (SOA) 。在这种情况下,完成某一个业务功能可能需要横跨多个服务,操作多个数据库。这就涉及到到了分布式事务,用需要操作的资源位于多个资源服务器上,而应用需要保证对于多个资源服务器的数据的操作,要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同资源服务器的数据一致性。
跨库事务
跨库事务指的是,一个应用某个功能需要操作多个库,不同的库中存储不同的业务数据。一个服务同时操作2个库的情况:

分库分表
通常一个库数据量比较大或者预期未来的数据量比较大,都会进行水平拆分,也就是分库分表。如
下图,将数据库 B 拆分成了2个库:

对于分库分表的情况,一般开发人员都会使用一些数据库中间件来降低 sql 操作的复杂性。如,对
sql insert into user(id,name) values (1," 张三 "),(2," 李四 ") 。这条 sql 是操作单库的语法,单库情
况下,可以保证事务的一致性。
但是由于现在进行了分库分表,开发人员希望将 1 号记录插入分库 1 2 号记录插入分库 2 。所以数
据库中间件要将其改写为 2 sql ,分别插入两个不同的分库,此时要保证两个库要不都成功,要不都失败,因此基本上所有的数据库中间件都面临着分布式事务的问题
服务化

Service A 完成某个功能需要直接操作数据库,同时需要调用 Service B Service C ,而 Service B 又同时操作了2 个数据库, Service C 也操作了一个库。需要保证这些跨服务的对多个数据库的操作要不都成功,要不都失败,实际上这可能是最典型的分布式事务场景。
常见分布式事务解决方案
1 seata 阿里分布式事务框架
2 、消息队列
3 saga
4 XA
他们有一个共同点,都是 两阶段 (2PC) 两阶段 是指完成整个分布式事务,划分成两个步骤完成。
实际上,这四种常见的分布式事务解决方案,分别对应着分布式事务的四种模式: AT TCC Saga
XA
2PC两阶段提交协议:
2PC( 两阶段提交, Two-Phase Commit)
顾名思义,分为两个阶段: Prepare 预处理阶段 和 Commit 提交阶段
Prepare :提交事务请求
基本流程如下图:
1. rollback 请求 协调者向所有参与者发送 Rollback 请求。
2. 事务回滚 参与者收到 Rollback 后,使用 Prepare 阶段的 Undo 日志执行事务回滚,完成后释放事务执行期占用的所有资源。
3. 反馈结果 参与者执行事务回滚后向协调者发送 Ack 响应。
4. 中断事务 接收到所有参与者的 Ack 响应后,完成事务中断
2PC问题
1. 同步阻塞 参与者在等待协调者的指令时,其实是在等待其他参与者的响应,在此过程中,参与者是无法进行其他操作的,也就是阻塞了其运行。 倘若参与者与协调者之间网络异常导致参与者一直收不到协调者信息,那么会导致参与者一直阻塞下去。
2. 单点 在 2PC 中,一切请求都来自协调者,所以协调者的地位是至关重要的,如果协调者宕机,那么就会使参与者一直阻塞并一直占用事务资源。
如果协调者也是分布式,使用选主方式提供服务,那么在一个协调者挂掉后,可以选取另一个协调者继续后续的服务,可以解决单点问题。但是,新协调者无法知道上一个事务的全部状态信息( 例如已等待 Prepare 响应的时长
) ,所以也无法顺利处理上一个事务。
3. 数据不一致 Commit 事务过程中 Commit 请求 /Rollback 请求可能因为协调者宕机或协调者与参与者网络问题丢失,那么就导致了部分参与者没有收到 Commit/Rollback 请求,而其他参与者则正常收到执行了 Commit/Rollback 操作,没有收到请求的参与者则继续阻塞。这时,参与者之间的数据就不再一致了。
当参与者执行 Commit/Rollback 后会向协调者发送 Ack ,然而协调者不论是否收到所有的参与者的
Ack ,该事务也不会再有其他补救措施了,协调者能做的也就是等待超时后像事务发起者返回一个“ 我不确定该事务是否成功”
4. 环境可靠性依赖 协调者 Prepare 请求发出后,等待响应,然而如果有参与者宕机或与协调者之间的网络中断,都会导致协调者无法收到所有参与者的响应,那么在 2PC 中,协调者会等待一定时间,然后超时后,会触发事务中断,在这个过程中,协调者和所有其他参与者都是出于阻塞的。这种机制对网络问题常见的现实环境来说太苛刻了。

2. AT 模式介绍

AT 模式是一种无侵入的分布式事务解决方案。阿里 Seata 框架,实现了该模式。在 AT 模式下,用户只 需关注自己的“ 业务 SQL” ,用户的 业务 SQL” 作为一阶段, Seata 框架会自动生成事务的二阶段提交和回滚操作。
一阶段:
Seata 会拦截 " 业务 SQL" ,解析 SQL 语义
查询 业务 SQL” 要更新的业务数据,在业务数据被更新前,将其保存成 “before image”
执行 业务 SQL” ,更新业务数据
查询更新后的数据,将其保存成 “after image”
before image after image 保存至 Undo Log 表中
生成行锁
以上操作全部在一个数据库事务内完成,这样保证了一阶段操作的原子性。
 二阶段(提交):

  • 因为业务SQL” 在一阶段已经提交至数据库,所以 Seata 框架只需将一阶段保存的快照数据和行锁删掉,完成数据清理即可。

二阶段(回滚):
  • 首先要校验脏写,对比数据库当前业务数据 “after image”
  • 如果两份数据完全一致就说明没有脏写,可以还原业务数据。
  • 如果不一致就说明有脏写,出现脏写就需要转人工处理。
  • “before image”还原业务数据
  • 删除快照数据和行锁

 

 3. Seata是什么?

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。 Seata 将为用户提供了 AT TCC SAGA XA 事务模式,为用户打造一站式的分布式解决方案。 AT 模式是阿里首推的模式。
Seata的三大角色
Seata 的架构中,一共有三个角色:
TC (Transaction Coordinator) - 事务协调者 :维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器 :定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器 :管理分支事务处理的资源,与 TC 交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
其中, TC 为单独部署的 Server 服务端, TM RM 为嵌入到应用中的 Client 客户端。
在 Seata 中,一个分布式事务的生命周期如下:

1.TM 请求 TC 开启一个全局事务。 TC 会生成一个 XID 作为该全局事务的编号。 XID ,会在微服务的调用链路中传播,保证将多个微服务的子事务关联在一起。 当一进入事务方法中就会生成XID ,global_table 就是存储的全局事务信息 ,
2.RM 请求 TC 将本地事务注册为全局事务的分支事务,通过全局事务的 XID 进行关联。 当运行数据库操作方法,branch_table 存储事务参与者
3.TM 请求 TC 告诉 XID 对应的全局事务是进行提交还是回滚。
4.TC 驱动 RM 们将 XID 对应的自己的本地事务进行提交还是回滚。

 

 4. Seata快速开始

https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html 官网文档

Seata ServerTC)环境搭建
下载安装包
https://github.com/seata/seata/releases 下载 1.3.0 版本

Server 端存储模式( store.mode )支持三种:
  • file(默认)单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高 (默认)
  • db:(5.7+)高可用模式,全局事务会话信息通过db共享,相应性能差些
  • redis Seata-Server 1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置适合当前场景的redis持久化配置
使用db模式进行seata-server存储
打开 config/file.conf
修改 mode="db"
修改数据库连接信息( URL\USERNAME\PASSWORD)

 

创建数据库 seata_server
新建表: 可以去 seata 提供的资源信息中下载
https://github.com/seata/seata/tree/master/script/server/db

 

 

Nacos(注册&配置中心)配置
Seata Server 注册到 Nacos ,并配置到配置中心
打开 conf/registry.conf ,修改 conf 目录下的 registry.conf 配置:

 下载整个 script 文件夹,复制到 bin 同级目录下

 修改 /seata/script/config-center/config.txt 文件

 打开D:\seata-server-1.3.0\seata\script\config-center\nacos 目前,修改nacos-config.sh

 注意:mysql5.7url可以添加useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true

mysql8.0url都要添加

 双击启动nacos-config.sh文件(必须安装git

 

 目的:将seata配置信息加载到Nacos配置中心(太多了,不太好创建)

启动seata-server
bin 目录下,双击 seata-server.bat ,默认端口 8091

 

搭建分布式事务微服务场景 Seata Client
创建两个数据库 seata_stock seata_order
分别在 seata_stock 下创建 stock_tab seata_order order_tab
# 库存表
CREATE TABLE `stock_tab` (
`id` int(11) NOT NULL AUTO_INCREMENT, #库存ID
`product_id` int(11) NULL DEFAULT NULL, #商品ID
`count` int(11) NULL DEFAULT 0, #商品数量
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE =
utf8_general_ci ROW_FORMAT = Compact;
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
# 订单表
CREATE TABLE `order_tab` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) NULL DEFAULT 0 COMMENT '商品id',
`total_amount` int(11) NULL DEFAULT 0 COMMENT '总金额',
`status` int(255) NULL DEFAULT NULL COMMENT '0->待付款;1->待发货',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE =
utf8_general_ci ROW_FORMAT = Compact;
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
业务场景:
用户下单,整个业务逻辑由三个微服务构成:
订单服务:根据采购需求创建订单。
库存服务:对给定的商品扣除库存数量
运行代码发现:使用本地事务,订单插入失败,库存却成功更新。。。。。。

 AT模式 seata

在客户端项目pom中引入seata

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><version>2.1.3.RELEASE</version>
</dependency>
配置客户端( order stock)application.yml

tx-service-group: 事务组名称 需要与设置的 config.text
service.vgroupMapping.my_test_tx_group=default 保持一致
service 中添加 @GlobalTransactional 注解( TM 方)
运行测试。。。。。。
如果报错:请在添加订单与修改库存的业务中打印 xid 查询是否保持一致

相关文章:

Seata 分布式事务

1. 分布式事务介绍 传统单体应用场景下&#xff0c;系统的数据保存在一个数据库实例中&#xff0c;通常场景的关系数据库都能自动提供事务保证&#xff0c;并且这种情况下的事务称为本地事务&#xff0c;能保证原子性、一致性、隔离性、持久性&#xff08;ACID 特性&#xff09…...

Burp入门(10)-IP伪造插件

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;IP伪造和爬虫审计_哔哩哔哩_bilibili 本文详细介绍IP伪造插件Burp Fake IP使用。 一、插件安装 打开Burp Suite。进入扩展标签页。点击添加&…...

idea连接SQL Server数据库_idea连接sqlserver数据库

4.设置密码&#xff08;这一步可以在安装数据库时就可以完成&#xff09;&#xff0c;如果觉得用户名有问题&#xff0c;也可以修改用户名 5.查看SQL Server端口号&#xff08;默认端口&#xff1a;1433&#xff09;&#xff0c;选择SQL Server2019配置管理器 6.打开SQL Server…...

SQL汇总数据:聚集函数

我们经常需要汇总数据而无需实际检索出这些数据&#xff0c;为此SQL提供了专门的函数。使用这些函数&#xff0c;SQL查询能够高效地检索数据&#xff0c;以便进行分析和报表生成。这类检索的例子包括&#xff1a; 确定表中行数&#xff08;或者满足某个条件或包含某个特定值的…...

Next.js系统性教学:服务器操作与数据变更

更多有关Next.js教程&#xff0c;请查阅&#xff1a; 【目录】Next.js 独立开发系列教程-CSDN博客 目录 1. 什么是服务器操作和数据变更&#xff1f; 1.1 服务器操作 (Server Actions) 1.2 数据变更 (Mutations) 2. Next.js中的服务器操作与数据变更 2.1 引入&#xff1a…...

Python Selenium 各浏览器驱动下载与配置使用(详细流程)

大家好啊&#xff01;我是NiJiMingCheng 这是我的博客&#xff1a;NiJiMingCheng 这节课我们来学习安装selenium和对应的各个浏览器驱动&#xff0c;个人比较喜欢使用谷歌浏览器驱动&#xff0c;所以接下来以谷歌浏览器来为大家做示例&#xff01;&#xff01;&#xff01; Sel…...

python flask 框架模块介绍

Flask 是一个轻量级、可扩展的 Python Web 框架&#xff0c;特别适合构建小型和中型应用程序。它的设计哲学是简单、灵活&#xff0c;允许开发者根据需要选择或创建功能模块。以下是 Flask 框架的核心模块和其功能的详细讲解&#xff1a; 1. Flask 核心模块 (1) flask.Flask 类…...

手把手搭建基于.NET 8.0的Web API项目

1.背景 工作以后&#xff0c;大部分时间都是在做基于业务的CRUD工作&#xff0c;软件产品或者项目的框架基本都早就搭建好了&#xff0c;程序员只需要在框架内去填格子打代码就行了。于是&#xff0c;我抽了时间来搭建个简单的三层架构模式的web api项目&#xff0c;技术点大概…...

SQL注入基础入门篇 注入思路及常见的SQL注入类型总结

目录 前言一、了解mysql数据库1、了解sql增删改查2、了解sql查询 二、sql注入基础三、学习sql注入漏洞1、union注入1、判断数字型注入还是字符型型注入&#xff1a;2、判断闭合方式&#xff08;字符型注入&#xff09;&#xff1a;3、判断回显位4、查询库名&#xff0c;表名&am…...

部门操作和日志

PostMapping("/depts") public Result add(RequestBody Dept dept){System.out.println("添加部门: " dept);deptService.add(dept);return Result.success(); }Override public void add(Dept dept) {dept.setCreateTime(LocalDateTime.now());dept.setU…...

如何使用WinCC DataMonitor基于Web发布浏览Excel报表文档

本文介绍使用 WinCC DataMonitor 的 "Excel Workbooks" 功能&#xff0c;通过 Excel 表格显示 WinCC 项目的过程值、归档变量值和报警归档消息。并可以通过 Web 发布浏览访问数据 1&#xff0e;WinCC DataMonitor是什么 ? DataMonitor 是 SIMATIC WinCC 工厂智能中…...

禁用SAP Hana错误密码锁定用户功能

背景 公司项目适配多种数据库其中包含SAP Hana&#xff0c;由于有同事的数据库连接工具保存了某个在用的数据库的旧密码&#xff0c;导致时不时会被锁用户。通过查询官方文档已解决&#xff0c;这里统一记录一下。 禁用密码锁定方法 以下按系统管理员和普通用户的解法分别列…...

uni-app 个人课程表页面

uni-app 个人课程表页面 插件参考地址 大部分代码都是参考了上述代码&#xff0c;只对代码做出了优化 1. 页面模板 在 schedule.vue 文件中&#xff0c;编写页面结构&#xff1a; <template><view><u-navbar title"个人中心"><view class&q…...

实现盘盈单自动化处理:吉客云与金蝶云星空数据对接

盘盈单103v2对接其他入库&#xff1a;吉客云数据集成到金蝶云星空 在企业信息化管理中&#xff0c;数据的高效流转和准确性至关重要。本文将分享一个实际案例&#xff0c;展示如何通过轻易云数据集成平台&#xff0c;将吉客云的数据无缝对接到金蝶云星空&#xff0c;实现盘盈单…...

如何查看内网设备访问互联网时的出口 IP 地址?

在企业VPC中我们通常是一个机房公用一个公网IP&#xff0c;也就是所有的设备共用同一个出口IP。 那么如何查看如何查看内网设备访问互联网时的出口 IP 地址呢&#xff1f; 要查看一台 Linux 内网设备访问互联网时的出口 IP 地址&#xff0c;可以使用以下几种方法&#xff1a;…...

JavaCV之FFmpegFrameFilter视频转灰度

1、代码 package com.example.demo.ffpemg;import lombok.SneakyThrows; import org.bytedeco.javacv.*;public class FFmpegFrameFilterVideoExample {SneakyThrowspublic static void main(String[] args) {// 输入视频文件路径String inputVideoPath "f:/2222.mp4&qu…...

MySQL | 尚硅谷 | 第16章_变量、流程控制与游标

MySQL笔记&#xff1a;第16章_变量、流程控制与游标 文章目录 MySQL笔记&#xff1a;第16章_变量、流程控制与游标第16章_变量、流程控制与游标 1. 变量1.1 系统变量1.1.1 系统变量分类1.1.2 查看系统变量 1.2 用户变量1.2.1 用户变量分类1.2.2 会话用户变量 1.2.3 局部变量1.2…...

css矩形样式,两边圆形

废话不多说&#xff0c;代码如下&#xff0c;直接拷贝即可使用&#xff1a; index.vue文件 <template><view class"wrap"><view class"tabs"><view class"tab active"><view class"name">标签</view…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(7)

1.问题描述&#xff1a; 推送通知到手机&#xff0c;怎么配置拉起应用指定的页面&#xff1f; 解决方案&#xff1a; 1、如果点击通知栏打开默认Ability的话&#xff0c; actionType可以设置为0&#xff0c; 同时可以在.clickAction.data中&#xff0c;指定待跳转的page页面…...

孚盟云 MailAjax.ashx SQL注入漏洞复现

0x01 产品简介 上海孚盟软件有限公司是一家外贸SaaS服务提供商,也是专业的外贸行业解决方案专业提供商。 全新的孚盟云产品,让用户可以用云模式实现信息化管理,让用户的异地办公更加流畅,大大降低中小企业在信息化上成本,用最小的投入享受大型企业级别的信息化服务,主要…...

Windows平台Unity3D下RTMP播放器低延迟设计探讨

技术背景 好多开发者希望我们分享下大牛直播SDK是如何在Unity下实现低延迟的RTMP播放的&#xff0c;以下是一些降低 Unity 中 RTMP 播放器延迟的方法&#xff1a; 一、选择合适的播放插件或工具 评估和选用专业的流媒体插件 市场上有一些专门为 Unity 设计的流媒体插件&…...

数据结构---队列(Queue)

1. 简介 队列&#xff08;Queue&#xff09;是一种常用的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。这意味着第一个进入队列的元素将是第一个被移除的元素。队列在计算机科学中有着广泛的应用&#xff0c;比如任…...

软件测试丨Appium 源码分析与定制

在本文中&#xff0c;我们将深入Appium的源码&#xff0c;探索它的底层架构、定制化使用方法和给软件测试带来的优势。我们将详细介绍这些技术如何解决实际问题&#xff0c;并与大家分享一些实用的案例&#xff0c;以帮助读者更好地理解和应用这一技术。 Appium简介 什么是App…...

selenium学习:等待方式

隐式等待 1.针对查找元素设置最大的超时时间 2.可以全局性的设置 3.不满足时&#xff0c;提示no such element driver.implicitly_wait(5) #对查找元素最大的超时时间&#xff0c;如果超过最大等待时间后&#xff0c;没有找到元素&#xff0c;则会报错&#xff1a;no such #e…...

京准电钟分享:医院网络内NTP时间同步服务器作用是什么?

京准电钟分享&#xff1a;医院网络内NTP时间同步服务器作用是什么&#xff1f; 京准电钟分享&#xff1a;医院网络内NTP时间同步服务器作用是什么&#xff1f; 时间同步技术必定将是整个大数据处理系统的重要支撑和保障。时间同步技术使数据产生与处理系统的所有节点具有全局…...

Excel 合并工具 将文件复制到目标工作表中与操作日志记录

指定文件夹中读取符合条件的 Excel 文件&#xff0c;将其中的数据按照一定规则复制到目标工作表中&#xff0c;并进行相关的日志记录和工作簿保存操作。 先看下 excel 的结构 合并的结果 log 记录 vba 代码 Sub DeltaCheck()作者和创建时间的注释 定义工作表变量Dim ws As Wor…...

Linux 内核源码

Linux 内核的源代码可以在以下位置获取&#xff1a; • 官方网站&#xff1a;https://www.kernel.org/是Linux内核源代码的官方获取渠道&#xff0c;该网站提供了各种版本的内核源代码压缩包&#xff0c;用户可按需选择版本下载. • Git 仓库&#xff1a;使用Git工具可克隆Li…...

Windows中MySQL8.3.4 MSI版本——详细安装教程

一、下载MySQL安装文件。 下载地址&#xff1a;MySQL官网 进入后点击下面的MySQL社区版下载 点击MySQL Comunity Server。 我这里选择的是版本8.4.3LTS版本&#xff0c;在线对应的msi文件。 点击No thanks,直接下载。 二、安装MySQL 2.1、双击刚刚下载好的msi文件&#xff0c;…...

STM32F103单片机使用STM32CubeMX新建IAR工程步骤

打开STM32CubeMX软件&#xff0c;选择File 选择新建工程 在打开的窗口输入单片机型号 在右下角选择单片机型号&#xff0c;然后点右上角 start project&#xff0c;开始新建工程。 接下来设置调试接口&#xff0c;在左边System Core中选择 SYS&#xff0c;然后在右右边debu…...

使用 WebRtcStreamer 实现实时视频流播放

WebRtcStreamer 是一个基于 WebRTC 协议的轻量级开源工具&#xff0c;可以在浏览器中直接播放 RTSP 视频流。它利用 WebRTC 的强大功能&#xff0c;提供低延迟的视频流播放体验&#xff0c;非常适合实时监控和其他视频流应用场景。 本文将介绍如何在Vue.js项目中使用 WebRtcSt…...

Java中内存存储与Redis存储的动态同步示例

在web应用程序中&#xff0c;缓存的使用越来越普遍。Redis&#xff0c;作为一种高性能的键值数据库&#xff0c;常被用作数据缓存。本文将说明如何在 Java 应用中使用 Redis 存储&#xff0c;并确保在内存中的值发生变化时&#xff0c;Redis 中的值也能动态更新。 Redis&#…...

Vue3的表单提交控制:条件启用和禁用按钮

目录 前言1. 需求分析2. Demo 前言 主要总结基本的知识点、需求归类以及模版的总结 新增的时候只有点击某个按钮&#xff0c;后续才能触发保存 但是为了规避 编辑的时候同一个表单&#xff0c;需要加入一个type&#xff0c;避开update而不是create 以下Demo主要作为分析使…...

FastAPI解决跨域报错net::ERR_FAILED 200 (OK)

目录 一、跨域问题的本质 二、FastAPI中的CORS处理 1. 安装FastAPI和CORS中间件 2. 配置CORS中间件 3. 运行FastAPI应用 三、解决跨域报错的步骤 四、案例:解决Vue.js与FastAPI的跨域问题 1. Vue.js前端应用 2. FastAPI后端API 3. 配置CORS中间件 4. 运行和测试 五…...

使用SQLark分析达梦慢SQL执行计划的一次实践

最近刚参加完达梦的 DCP 培训与考试&#xff0c;正好业务系统有个 sql 查询较慢&#xff0c;就想着练练手。 在深入了解达梦的过程中&#xff0c;发现达梦新出了一款叫 SQLark 百灵连接的工具。 我首先去官网大致浏览了下。虽然 SQLark 在功能深度上不如 DM Manager 和 PL/SQ…...

12-从TypeScript到ArkTS的适配规则(2)

12-从TypeScript到ArkTS的适配规则&#xff08;2&#xff09; 不支持this类型 **规则&#xff1a;**arkts-no-typing-with-this 级别&#xff1a;错误 ArkTS不支持this类型&#xff0c;改用显式具体类型。 TypeScript interface ListItem { getHead(): this} class C { …...

Flink WebUI解析(待更新)

写在前面 2024-05-23&#xff1a;对于flink webUI的查看&#xff0c;首先还是根据先整体观看一下Task的划分&#xff0c;然后根据Exception去寻找对应的TaskManager相关信息&#xff0c;然后双向确定是什么原因造成的&#xff1b;作为metrics&#xff0c;虽然看起来花里胡哨&a…...

C语言(十五)---- 编译和链接

编译和链接 编译和链接翻译环境和运行环境翻译环境 编译预处理&#xff08;预编译&#xff09;编译词法分析语法分析语义分析 汇编 链接运行环境 翻译环境和运行环境 在实现C语言代码文件的过程中存在两个不同的环境&#xff0c;分别有着不同的作用。 翻译环境&#xff1a;在…...

Java已死,大模型才是未来?

一、引言 在数字技术的浪潮中&#xff0c;编程语言始终扮演着至关重要的角色。Java&#xff0c;自1995年诞生以来&#xff0c;便以其跨平台的特性和丰富的生态系统&#xff0c;成为了全球范围内开发者们最为青睐的编程语言之一 然而&#xff0c;随着技术的不断进步和新兴语言的…...

Vue3页面内跳转锚点-scrollIntoView()

scrollIntoView&#xff08;&#xff09; scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域。 element.scrollIntoView&#xff08;&#xff09;; // 等同于element.scrollIntoView(true) element.scrollIntoView&#xff08;alignToTop&#xff09;; //布尔参…...

UE4_环境_体积云_通过蓝图来控制云彩的形状及位置。

一、体积云使用之前需要做两件事&#xff1a; 1、开启插件Volumetrics&#xff0c;重启虚幻编辑器。 2、确定视图选项中“显示引擎内容”被勾选。 二、开始使用体积云 1、找到体积云&#xff0c;并拖拽到场景中 2、我们可以调节参数来设置体积云。 3、我们找到Volumetrics内容…...

【优选算法-滑动窗口】长度最小的子数组、无重复字符的最长子串、最大连续1的个数、将x减为0的最小操作数、水果成篮

一、长度最小的子数组 题目链接&#xff1a; 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 题目介绍&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, .…...

在Spring Boot项目中整合Redis:高效数据存储与缓存的最佳实践

目录 1. 引入依赖 2. 创建序列化配置类 2.1 序列化的选择 3. 配置YAML文件 3.1 连接池的配置 4. 使用Redis 4.1 复杂数据类型的存储 4.2 列表、集合和哈希的使用 4.2.1 列表示例 4.2.2 集合示例 4.2.3 哈希示例 5. 处理事务和管道 5.1 事务示例 5.2 管道示例 6…...

什么是自动化办公

自动化办公是指使用技术工具或软件&#xff0c;通过预设流程或脚本&#xff0c;自动执行日常办公任务&#xff0c;从而提升效率、减少错误、节约时间的办公模式。它适用于需要重复性、规则明确的工作流程&#xff0c;让员工将精力集中在更具创造性和战略性的工作上。 自动化办公…...

搜索引擎是如何理解你的查询并提供精准结果的?

目录 一、搜索引擎简单介绍 二、搜索引擎整体架构和工作过程 &#xff08;一&#xff09;整体分析 &#xff08;二&#xff09;爬虫系统 三个基本点 爬虫系统的工作流程 关键考虑因素和挑战 &#xff08;三&#xff09;索引系统 网页处理阶段 预处理阶段 反作弊分析…...

国内外网络安全政策动态(2024年11月)

▶︎ 1.13项网络安全国家标准自11月1日起实施 11月1日起&#xff0c;《网络安全技术 信息技术安全评估准则》等13项网络安全国家标准开始实施&#xff0c;其中&#xff0c;《网络安全技术 信息技术安全评估准则 第1-5部分》《网络安全技术 信息技术安全评估方法》等6项推荐性国…...

服务器---centos上前端从0到1配置项目部署

在进行前端开发时,我们经常会面临将项目部署到服务器上的需求。为了更好地管理和保护我们的前端应用,我们通常会使用反向代理来实现对后端服务的访问。而对于使用CentOS系统的开发者来说,Nginx就是一个非常强大且可靠的工具。 在本文中,我们将探讨如何在CentOS系统上配置Ng…...

【前端】深入解析 JavaScript 中的 instanceof 运算符与 number 数据类型 和 Number 对象 区别辨析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;理论基础&#xff1a;instanceof 运算符的设计初衷与核心功能基础定义与应用示例解析代码分解 &#x1f4af;typeof 与 instanceof&#xff1a;两种类型检测方法的语义与…...

为什么类 UNIX 操作系统通常内置编译器?为什么 Windows 更倾向于直接使用二进制文件?

操作系统是否内置编译器&#xff0c;取决于该系统的设计目标、用户群体以及常见的使用场景。以下是内置编译器和直接使用二进制的设计理念和原因的分析&#xff1a; 为什么类 UNIX 操作系统通常内置编译器&#xff1f; 面向开发者的需求&#xff1a; 类 UNIX 系统&#xff08;如…...

Ubuntu安装grafana

需求背景&#xff1a;管理服务器&#xff0c;并在线预警&#xff0c;通知 需求目的&#xff1a; 及时获取服务器状态 技能要求&#xff1a; 1、ubuntu 2、grafana 3、prometheus 4、node 步骤&#xff1a; 一、grafana安装 1、准备系统环境&#xff0c;配置号网络 2、…...

Java阶段三06

第3章-第6节 一、知识点 理解MVC三层模型、理解什么是SpringMVC、理解SpringMVC的工作流程、了解springMVC和Struts2的区别、学会使用SpringMVC封装不同请求、接收参数 二、目标 理解MVC三层模型 理解什么是SpringMVC 理解SpringMVC的工作流程 学会使用SpringMVC封装请求…...