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

对MySQL滴MVCC理解(超详细)

学习目标

  • 什么是MVCC?
    • MVCC的核心概念
    • MVCC 的工作原理
    • MVCC 的优势
    • MVCC 的劣势
  • 什么是MySQL中InnoDB下滴快照读和当前读?
    • 一、快照读(Snapshot Read)
    • 二、当前读(Current Read)
    • 三、快照读和当前读的区别
    • 四、当前读、快照读和MVCC的关系
  • MVCC中的RR 是如何在 RC 的基础上解决不可重复读的?
  • RC, RR这两者下的 InnoDB 快照读有什么不同嘞?
  • MVCC 能解决什么问题,好处是什么嘞?
    • 解决的问题
    • 带来的好处

  什么是MVCC嘞?什么是MySQL中InnoDB下滴快照读和当前读?MVCC中的RR 是如何在 RC 的基础上解决不可重复读的?RC, RR这两者下的 InnoDB 快照读有什么不同嘞?MVCC 能解决什么问题,好处是什么嘞?

什么是MVCC?

  MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于管理数据库并发访问的技术。它通过在数据库中存储数据的多个版本来避免读写冲突,从而提高了数据库的并发性能。MVCC 广泛应用于现代关系型数据库系统,如 PostgreSQL、MySQL(InnoDB 引擎)等。下面详细讲解 MVCC 的概念和工作原理。

MVCC的核心概念

  1. 数据行版本管理
    • 每一行数据在数据库中都有一个或多个版本。
    • 每个版本包含创建时间戳(通常是事务ID)和删除时间戳(也可能是事务ID,或者是“未删除”标记)。
  2. 事务快照
    • 每个事务启动时都会创建一个“快照”,这个快照实际上是事务能看到的数据版本的集合。
    • 快照确保事务只能看到在它开始之前已经提交的修改。
  3. 时间戳或事务ID
    • 用来标识每个数据版本的创建和删除时间。
    • 时间戳或事务ID是递增的,确保唯一性。

MVCC 的工作原理

MVCC 通过在数据读写操作中使用不同的版本,实现了读写不阻塞(或者说最小化了锁的使用):

  1. 读取操作
    • 当一个事务读取某行数据时,它只会查看那些在它开始之前已经创建且尚未删除的版本。
    • 这意味着读取操作不会阻塞写入操作,因为读取的是快照中的旧版本数据。
  2. 写入操作
    • 写入操作会创建一个新版本的数据行,而不会直接修改现有数据行。
    • 新版本的数据行会包含一个更新的事务ID,标记为创建时间。
    • 同时,旧版本的数据行不会被立即删除,而是会被标记为在某个事务ID之后删除(即在该事务提交时)。
  3. 删除操作
    • 删除操作类似于写入操作,它会创建一个“删除标记”的新版本,而不是直接删除旧版本。
    • 这个“删除标记”实际上是一个指向该版本数据行的指针,它会在某个事务ID之后生效。
  4. 垃圾回收
    • 由于数据行有多个版本,数据库系统会定期进行垃圾回收,删除那些不再需要(即对所有当前活跃事务都不可见)的旧版本数据。

MVCC 的优势

  1. 提高并发性能
    • 读写操作可以并行进行,减少了锁的使用,从而提高了数据库的并发处理能力。
  2. 避免长时间锁
    • 由于读取操作不阻塞写入操作,写入操作也不需要等待读取操作完成,从而避免了长时间持有锁的情况。
  3. 数据一致性
    • MVCC 提供了快照隔离级别,确保每个事务看到的是一致的数据视图。

MVCC 的劣势

  1. 存储开销
    • 由于需要存储多个版本的数据,MVCC 会增加数据库的存储开销。
  2. 垃圾回收成本
    • 垃圾回收过程可能会消耗一定的计算资源,特别是在频繁更新和删除操作的数据库中。
  3. 复杂性
    • MVCC 增加了数据库系统的复杂性,实现和维护成本较高。

结论:
  MVCC 是一种强大的并发控制机制,它通过存储数据的多个版本来实现读写不阻塞,从而提高了数据库的并发性能。虽然 MVCC 带来了额外的存储开销和复杂性,但其在现代数据库系统中的应用已经证明了其价值和实用性。

什么是MySQL中InnoDB下滴快照读和当前读?

  在MySQL中,InnoDB存储引擎提供了两种主要的读操作方式:快照读(Snapshot Read)和当前读(Current Read)。这两种读操作方式在数据一致性、加锁行为以及应用场景上有所不同。下面将详细讲解这两种读操作方式。

一、快照读(Snapshot Read)

  1. 定义
    快照读是一种非加锁的读取方式,它读取的是事务开始时的数据快照。这意味着,在事务执行期间,无论其他事务如何修改数据,快照读始终能够看到一个一致的数据视图。
  2. 实现机制
    快照读依赖于InnoDB的多版本并发控制(MVCC)机制。每个事务在开始时都会创建一个Read View,用于确定在当前事务开始时已经提交的事务。在执行SELECT查询时,InnoDB会根据Read View来判断哪些数据行是可见的,从而返回符合条件的数据行。
  3. 应用场景
    快照读主要用于读取数据的一致性视图,确保在一个事务中多次读取同一数据时结果一致。它适用于那些不需要实时看到最新数据,但需要保证数据一致性的场景。
  4. 隔离级别
    • 在读提交(Read Committed, RC)隔离级别下,每次SELECT语句都会生成一个新的快照。
    • 在可重复读(Repeatable Read, RR)隔离级别下(MySQL InnoDB的默认隔离级别),事务开始时生成一个快照,事务中的所有SELECT语句都会使用这个快照。

二、当前读(Current Read)

定义
当前读是一种加锁的读取方式,它读取的是数据的最新版本,并且会对读取的数据加锁,以确保其他并发事务不能修改当前记录。
加锁行为
当前读会对读取的数据加锁,这取决于具体的SQL语句和隔离级别。例如,SELECT … FOR UPDATE会对读取的数据行加排他锁,而SELECT … LOCK IN SHARE MODE会对读取的数据行加共享锁。
应用场景
当前读适用于需要读取最新数据,并确保在读取期间数据不被其他事务修改的场景。它通常用于更新操作(如UPDATE、DELETE)之前的读取,以确保读取到的是最新版本的数据,并在更新时对数据行加锁以防止并发修改。
触发条件
当前读通常由特定的SQL语句触发,如UPDATE、DELETE、INSERT等修改数据的操作,以及SELECT … FOR UPDATE和SELECT … LOCK IN SHARE MODE等显式加锁的SELECT语句。

  当前读是指在读取数据时,要求读取的数据必须是最新写入的数据。这种读取方式通常伴随着一种锁机制,以确保数据的一致性。在MySQL中,当前读是通过锁定相应记录来实现的,这样其他事务在读取这些锁定的数据时将会被阻塞。当前读是一种加锁操作,也被称为悲观锁。当前读通常包括以下几种操作:

  • SELECT … LOCK IN SHARE MODE:共享锁,允许其他事务读取但不允许修改。
  • SELECT … FOR UPDATE:排他锁,不允许其他事务读取或修改。
  • UPDATE:排他锁,用于更新数据。
  • INSERT:排他锁,用于插入新数据。
  • DELETE:排他锁,用于删除数据。

三、快照读和当前读的区别

  1. 数据一致性
    • 快照读读取的是事务开始时的数据快照,保证了事务内多次读取同一数据时结果一致。
    • 当前读读取的是数据的最新版本,并加锁以确保数据的一致性和完整性。
  2. 加锁行为
    • 快照读是非加锁的读取方式。
    • 当前读是加锁的读取方式。
  3. 应用场景
    • 快照读适用于需要保证数据一致性但不需要实时看到最新数据的场景。
    • 当前读适用于需要读取最新数据并确保在读取期间数据不被其他事务修改的场景。
  4. 触发条件
    • 快照读通常由普通的SELECT语句触发。
    • 当前读通常由UPDATE、DELETE、INSERT等修改数据的操作,以及显式加锁的SELECT语句触发。

四、当前读、快照读和MVCC的关系

  1. 当前读与MVCC:在MySQL中,当前读使用的就是MVCC机制。不过,当前读并不是直接读取数据的最新版本,而是通过加锁来确保读取到的数据是最新的。在读取数据时,如果数据被其他事务修改并提交了,那么当前读会等待其他事务提交后再读取最新数据。这实际上是通过锁机制来保证数据的一致性。
  2. 快照读与MVCC:快照读是基于MVCC机制实现的。在快照读中,事务读取的是数据的一个历史版本,而不是最新版本。这是通过读取undo日志中的历史版本数据来实现的。同时,read view用于判断当前事务能够看到哪个版本的数据。因此,快照读能够避免加锁,提高并发性能。

MVCC中的RR 是如何在 RC 的基础上解决不可重复读的?

  MVCC(Multi-Version Concurrency Control,多版本并发控制)是数据库管理系统中一种用于提高并发性能的技术,它通过维护数据的多个版本来实现并发读取和写入操作,从而避免读锁和写锁的争用。在MVCC中,RR(Repeatable Read,可重复读)和RC(Read Committed,读已提交)是两种不同的隔离级别,它们在解决不可重复读问题上有着不同的机制。下面将详细讲解MVCC中的RR是如何在RC的基础上解决不可重复读问题的。

一、RC(读已提交)隔离级别下的不可重复读
在RC隔离级别下,每个事务的每次读取操作都会生成一个新的快照(或读视图),这意味着同一个事务内的多次读取操作可能会看到不同的数据版本。具体来说,当一个事务在执行过程中,另一个事务对数据进行了修改并提交,那么当第一个事务再次读取该数据时,它将会看到修改后的数据版本。这就导致了不可重复读问题。

二、RR(可重复读)隔离级别下的解决机制
为了解决RC隔离级别下的不可重复读问题,RR隔离级别采用了以下机制:

  1. 快照一致性:在RR隔离级别下,每个事务在其生命周期内只会生成一个快照(或读视图)。这意味着同一个事务内的多次读取操作都会看到这个快照中的数据版本,从而保证了数据的一致性。
  2. 读视图生成时机:在RR隔离级别下,快照(或读视图)是在事务开始时生成的。这意味着事务在开始时就已经确定了自己能够看到哪些数据版本,后续读取操作都会基于这个快照进行。
  3. 可见性判断:当事务进行读取操作时,系统会根据事务的隔离级别和读视图来判断数据的可见性。在RR隔离级别下,如果数据的事务ID小于读视图中的最小活跃事务ID(或者数据的事务ID已经提交且不在读视图的活跃事务列表中),那么该数据对当前事务是可见的。否则,数据对当前事务是不可见的,事务需要通过undo日志来读取数据的旧版本。

三、RR隔离级别下如何解决RC的不可重复读问题
通过上述机制,RR隔离级别能够在RC的基础上解决不可重复读问题:

  1. 避免多次生成快照:RR隔离级别避免了RC隔离级别下每次读取都生成新快照的问题,从而保证了同一个事务内的多次读取操作看到的数据版本是一致的。
  2. 保证数据一致性:由于RR隔离级别下每个事务只有一个快照,且快照是在事务开始时生成的,因此事务在执行过程中看到的数据版本是固定的,不会出现不可重复读的情况。
  3. 加强可见性判断:RR隔离级别通过严格的可见性判断机制,确保了事务只能看到符合隔离级别要求的数据版本,从而进一步增强了数据的一致性。

四、注意事项
  虽然RR隔离级别能够解决不可重复读问题,但它并不能完全解决幻读问题。幻读是指在同一个事务内,两次查询得到的记录集不一致(比如第一次查询没有某条记录,第二次查询却出现了该记录)。在RR隔离级别下,虽然同一个事务内的多次查询会看到相同的数据版本,但如果其他事务在两次查询之间插入了新的记录,那么这些新记录对当前事务可能是可见的(取决于具体的实现和查询条件)。因此,在某些情况下,RR隔离级别仍然可能出现幻读问题。为了完全解决幻读问题,通常需要使用更高级别的隔离级别(如串行化)或额外的锁机制。

RC, RR这两者下的 InnoDB 快照读有什么不同嘞?

  在MySQL的InnoDB存储引擎中,RC(Read Committed,读已提交)和RR(Repeatable Read,可重复读)是两种不同的事务隔离级别,它们在快照读(Snapshot Read)行为上存在一些显著的不同。以下将详细讲解这两种隔离级别下InnoDB快照读的区别。

一、快照读概述
快照读是指在事务执行期间,读取一致性的数据快照,而不受其他并发事务的修改影响。这种读取方式可以确保事务在整个执行过程中看到的数据是一致的,即使其他事务对数据进行了修改。InnoDB通过多版本并发控制(MVCC)机制来实现快照读。

二、RC隔离级别下的快照读
在RC隔离级别下,快照读的特点如下:

  1. 每次读取生成新快照:在RC隔离级别下,每次读取操作都会生成一个新的快照或读视图。这意味着同一个事务内的多次读取操作可能会看到不同的数据版本。
  2. 可见性判断:当事务进行读取操作时,系统会根据当前事务的隔离级别和读视图来判断数据的可见性。在RC隔离级别下,如果数据的事务ID小于当前事务ID且已经提交,那么该数据对当前事务是可见的。
  3. 可能读到最新数据:由于每次读取都会生成新快照,因此RC隔离级别下的快照读可能会读到其他事务最新提交的数据。这就导致了同一个事务内的多次读取操作可能会看到不同的结果集,即不可重复读问题。

三、RR隔离级别下的快照读
在RR隔离级别下,快照读的特点如下:

  1. 事务开始时生成快照:与RC隔离级别不同,在RR隔离级别下,快照或读视图是在事务开始时生成的。这意味着同一个事务内的多次读取操作都会看到这个快照中的数据版本。
  2. 一致性保证:由于快照是在事务开始时生成的,并且贯穿整个事务过程,因此RR隔离级别下的快照读能够保证同一个事务内的多次读取操作看到的数据版本是一致的。这就避免了不可重复读问题。
  3. 可见性判断与RC相同:虽然快照生成时机不同,但RR隔离级别下读取数据的可见性判断机制与RC隔离级别是相似的。都是根据数据的事务ID和当前事务的读视图来判断数据的可见性。

四、总结与对比

  1. 快照生成时机:RC隔离级别下每次读取都会生成新快照,而RR隔离级别下快照是在事务开始时生成的。
  2. 数据一致性:由于快照生成时机的不同,RR隔离级别下的快照读能够保证数据的一致性,避免不可重复读问题;而RC隔离级别下则可能出现不可重复读问题。
  3. 可见性判断:两者在可见性判断机制上是相似的,都是根据数据的事务ID和当前事务的读视图来判断数据的可见性。但由于快照生成时机的不同,导致在实际应用中两者读取到的数据版本可能不同。

MVCC 能解决什么问题,好处是什么嘞?

MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种数据库并发控制方法,它通过维护数据的多个版本来实现读写操作的并行执行。MVCC主要解决了以下问题,并带来了相应的好处:

解决的问题

  1. 读写冲突
    • 脏读:在没有MVCC的情况下,一个事务可能读取到另一个未提交事务修改过的数据,如果后者回滚,那么前者读取的就是“脏”数据。MVCC确保事务只能读取到已提交的数据版本,从而避免脏读。
    • 不可重复读:在数据库操作期间,如果没有适当的隔离机制,一个事务多次读取同一数据可能会得到不同的结果,因为其他事务可能在此期间修改了这些数据。MVCC通过为每个事务提供一个一致的数据快照来解决这个问题。
    • 幻读:幻读是指在同一个事务中,执行相同的查询语句,但第二次查询却返回了第一次查询中没有的新记录。MVCC可以在一定程度上减少幻读的发生,尤其是在读取时没有主动加锁的情况下。
  2. 数据丢失:在写写操作中,如果没有合适的并发控制机制,可能会导致数据丢失问题。MVCC通过确保每个写操作都在其自己的数据版本上进行,避免了这一问题。

带来的好处

  1. 提高并发性能:由于读操作不需要等待写操作完成,写操作也不会阻止其他事务进行读取,因此可以显著提高系统的并发处理能力,尤其是在读多写少的场景下。
  2. 减少锁的使用:虽然MVCC本身也是一种形式的锁定机制,但它减少了传统意义上的行锁或表锁的需求,从而减少了锁竞争和锁开销,提高了系统的整体性能。
  3. 支持多种隔离级别:MVCC能够灵活支持不同的事务隔离级别,使得开发者可以根据具体需求选择合适的隔离级别,从而在保证数据一致性的同时,提高系统的并发性能。

数据库并发场景有三种,分别为:

  1. 读-读:这种场景不存在任何问题,也不需要特别的并发控制。因为多个事务同时读取同一数据时,并不会对数据造成修改,所以它们之间不会产生冲突。
  2. 读-写:这种场景存在线程安全问题,可能会造成事务隔离性问题。具体表现为,一个事务在读取数据时,另一个事务可能正在对该数据进行修改。如果没有适当的并发控制机制,就可能导致脏读、幻读、不可重复读等问题。
  3. 写-写:这种场景也存在线程安全问题,可能会存在更新丢失问题。具体表现为,两个或多个事务同时尝试修改同一数据,如果没有适当的并发控制机制,就可能导致数据的最终状态不是任何一个事务所期望的结果。

相关文章:

对MySQL滴MVCC理解(超详细)

学习目标 什么是MVCC?MVCC的核心概念MVCC 的工作原理MVCC 的优势MVCC 的劣势 什么是MySQL中InnoDB下滴快照读和当前读?一、快照读(Snapshot Read)二、当前读(Current Read)三、快照读和当前读的区别四、当前…...

Mac玩Steam游戏秘籍!

Mac玩Steam游戏秘籍! 大家好!最近有不少朋友在用MacBook玩Steam游戏时遇到不支持mac的问题。别担心,我来教你如何用第三方工具Crossover来畅玩这些不支持的游戏,简单又实用! 第一步:下载Crossover 首先&…...

matlab实现了一个优化的遗传算法,用于求解注汽站最优位置的问题

function [best_chromosome, best_fitness] optimized_genetic_algorithm()%% 遗传算法参数初始化% 定义井信息,包括坐标、管道长度、流量、压力等wells defineWells(); % 返回井的结构体数组N length(wells); % 注汽井数量% 遗传算法相关参数L_chromosome 20; …...

电商项目-基于ElasticSearch实现商品搜索功能(三)

本系列文章主要介绍基于 Spring Data Elasticsearch 实现商品搜索的后端代码,介绍代码逻辑和代码实现。 主要实现功能:根据搜索关键字查询、条件筛选、规格过滤、价格区间搜索、搜索查询分页、搜索查询排序、高亮查询。 主要应用技术:canal,…...

【Vim Masterclass 笔记12】S06L26 + L27:Vim 文本的搜索、查找及替换同步练习(含点评课)

文章目录 S06L26 Exercise 07 - Search, Find, and Replace1 训练目标2 操作指令2.1. 打开 search-practice.txt 文件2.2. 同一行内的搜索练习2.3. 当前文件内的搜索练习2.4. 单词搜索练习2.5. 全局替换练习 3 退出 Vim S06L27 同步练习点评课 写在前面 Vim 的文本检索、查找与…...

Jsoup实现实时爬取

文章目录 1.作用2.使用pom文件引入示例代码(来自官网) 3.测试代码4.上线代码控制层业务层 1.作用 获取Html文档&#xff0c;然后解析出需要的字段 2.使用 pom文件引入 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redi…...

如何在Ubuntu上安装Cmake

前言 ​ 本文主要阐述如何在Ubuntu22.04上面安装cmake&#xff0c;具体可看下面的操作。 正文 一、环境 Ubuntu22.04 cmake-3.31.4.tar.gz 二、步骤 参考这个方案&#xff1a; 【运维】Ubuntu如何安装最新版本的Cmake&#xff0c;编译安装Cmake&#xff0c;直接命令安装…...

图解Git——分支开发工作流《Pro Git》

分支开发工作流 由于分支管理的便捷&#xff0c; 才衍生出这些典型的工作模式&#xff0c;你可以根据项目实际情况选择。 1. 长期分支 适用于持续开发和发布周期长的项目。常见的长期分支包括&#xff1a; master&#xff1a;只保留稳定的代码&#xff0c;通常用于生产环境。…...

没有正确使用HTTP Range Request,导致访问Azure Blob存储的视频没有实现流式播放

引文&#xff1a; 组里的小伙伴在修改视频播放相关的代码&#xff0c;修改之前的方案使用CDN转发&#xff0c;可以实现流式播放&#xff0c;修改之后的代码因为没有正确的使用Http Range Request, 导致画面访问Azure Blob存储的视频没有实现流式播放&#xff0c;整理下线索在这…...

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测 目录 回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进的机器学习方法&#xff0c;用于处理…...

开发人员学习书籍推荐(C#、Python方向)

作为一名开发人员&#xff0c;持续学习和提升自己的技术水平是至关重要的。如今&#xff0c;技术不断更新换代&#xff0c;新的开发框架、语言和工具层出不穷。对于刚入行的开发者或希望深入某一领域的工程师来说&#xff0c;选对书籍是学习的捷径之一。本篇文章将推荐一些经典…...

Springboot + vue 小区物业管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…...

基于深度学习的视觉检测小项目(十二) 使用线条边框和渐变颜色美化界面

到目前为止&#xff0c;已经建立起了基本的项目架构&#xff0c;样式表体系也初步具备&#xff0c;但是与成品的界面相比&#xff0c;还是差点什么。 我的界面效果图&#xff1a; 优秀demo的界面截图&#xff1a; 是的&#xff0c;我的界面太“平” 了&#xff0c;没有立体感&…...

基于OQuPy的量子编程实例探究:理论、实践与展望

基于OQuPy的量子编程探究:理论、分析与实践 一、引言 1.1 研究背景与意义 近年来,量子计算作为一种革命性的计算范式,在科学界与产业界引发了广泛关注。它依托量子力学原理,运用量子比特(qubit)进行信息处理,与传统计算相比,具备并行处理、指数级加速等显著优势,为解…...

【数据库】二、关系数据库

文章目录 二、关系数据库1 关系2 关系数据库3 完整性约束4 关系运算 二、关系数据库 1 关系 域&#xff1a;一组具有相同数据类型的值的集合。 笛卡尔积&#xff1a;所有域&#xff08;域可相同&#xff09;中所有取值的组合 例如&#xff1a;D1{1,2,3}&#xff0c;D2{A,b}&…...

C#类型转换

C#是静态类型的语言&#xff0c;变量一旦声明就无法重新声明或者存储其他类型的数据&#xff0c;除非进行类型转换。本章的主要任务就是学习类型转换的知识。类型转换有显式的&#xff0c;也有隐式的。所谓显式&#xff0c;就是我们必须明确地告知编译器&#xff0c;我们要把变…...

【Vue】Vue组件--上

目录 一、组件基础 二、组件的嵌套关系 1. 基础架构 2. 嵌套 三、组件注册方式 1. 局部注册&#xff1a; 2. 全局注册&#xff1a; 四、组件传递数据 1. 基础架构 2. 传递多值 3. 动态传递数据 五、组件传递多种数据类型 1. Number 2. Array 3. Object 六、组…...

21、Transformer Masked loss原理精讲及其PyTorch逐行实现

1. Transformer结构图 2. python import torch import torch.nn as nn import torch.nn.functional as Ftorch.set_printoptions(precision3, sci_modeFalse)if __name__ "__main__":run_code 0batch_size 2seq_length 3vocab_size 4logits torch.randn(batch…...

构建高性能网络服务:从 Socket 原理到 Netty 应用实践

1. 引言 在 Java 网络编程中&#xff0c;Socket 是实现网络通信的基础&#xff08;可以查看我的上一篇博客&#xff09;。它封装了 TCP/IP 协议栈&#xff0c;提供了底层通信的核心能力。而 Netty 是在 Socket 和 NIO 的基础上&#xff0c;进一步封装的高性能、异步事件驱动的…...

Spring Boot教程之五十六:用 Apache Kafka 消费 JSON 消息

Spring Boot | 如何使用 Apache Kafka 消费 JSON 消息 Apache Kafka 是一个流处理系统&#xff0c;可让您在进程、应用程序和服务器之间发送消息。在本文中&#xff0c;我们将了解如何使用 Apache Kafka 在 Spring Boot 应用程序的控制台上发布 JSON 消息。 为了了解如何创建 …...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...