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

mysql中log

目录

MySQL 日志系统概述

日志类型

日志的作用和重要性

Mermaid图示

1. Undo Log 和 Redo Log 的协同工作图

2. Redo Log 确保持久性的流程图

Undo Log(回滚日志)

事务的原子性(Atomicity)保障

事务回滚机制

MVCC(多版本并发控制)实现

Mermaid图示

Undo Log 在事务回滚中的作用

​编辑Undo Log 在MVCC中的作用

Redo Log(重做日志)

事务的持久性(Durability)保障

WAL(Write-Ahead Logging)技术

Redo Log Buffer和刷盘时机

Redo Log的循环写入机制

Mermaid图示

Redo Log 持久性保障流程

​编辑WAL 技术流程

Binlog(归档日志)

记录数据库变更历史

数据备份和主从复制的作用

Binlog与Redo Log的区别

Mermaid图示

Binlog(归档日志)

记录数据库变更历史

数据备份和主从复制的作用

Binlog 与 Redo Log 的区别

Mermaid 图示

MySQL I/O模型及优化

I/O模型对性能的影响

优化磁盘I/O的方法

事务处理流程

一条SQL查询语句的生命周期

Update语句的执行过程

主从复制机制

主从复制的实现原理

主从复制的三种模式

Mermaid图示

Binlog的刷盘时机和过程

Mermaid图示

数据库的高可用性和灾难恢复

使用Redo Log和Binlog进行数据恢复

高可用性架构设计

参数配置对日志系统的影响

Mermaid图示

数据库的高可用性和灾难恢复

使用Redo Log和Binlog进行数据恢复

高可用性架构设计

Mermaid图示

参数配置对日志系统的影响

innodb_flush_log_at_trx_commit参数的作用

日志系统参数调优


MySQL 日志系统概述

日志类型
  1. Undo Log

    1. 记录事务前的数据状态,用于回滚和多版本并发控制。

  2. Redo Log

    1. 记录事务对数据页的修改,确保事务的持久性。

  3. Binlog

    1. 记录数据库变更操作,用于复制、备份和审计。

日志的作用和重要性
  • 确保事务的ACID属性。

  • 支持数据恢复、复制和备份。

  • 提供系统崩溃后的数据恢复能力。

Mermaid图示

1. Undo Log 和 Redo Log 的协同工作图

这个图示展示了Undo Log在事务开始时记录数据状态,以及在事务提交或回滚时的不同处理方式。

2. Redo Log 确保持久性的流程图

这个图示说明了Redo Log如何记录事务的修改,并在事务提交后将日志持久化到磁盘,以及在系统崩溃时如何使用Redo Log来恢复数据。

Undo Log(回滚日志)

事务的原子性(Atomicity)保障

Undo Log 确保了事务的原子性,即事务中的所有操作要么全部完成,要么全部不完成。如果事务在执行过程中遇到错误或用户执行了ROLLBACK操作,MySQL可以通过Undo Log中的记录将数据回滚到事务开始之前的状态。

事务回滚机制

当事务需要回滚时,MySQL会读取Undo Log中的记录,根据记录的内容将数据恢复到事务开始前的状态。这包括:

  • 对于INSERT操作,Undo Log记录了新插入行的详细信息,回滚时将删除这些行。

  • 对于DELETE操作,Undo Log记录了被删除行的详细信息,回滚时将重新插入这些行。

  • 对于UPDATE操作,Undo Log记录了被更新列的旧值,回滚时将这些列的值恢复为旧值。

MVCC(多版本并发控制)实现

Undo Log也是实现MVCC的关键部分。MVCC允许在不锁定资源的情况下进行并发访问,通过Undo Log保存的数据历史版本,不同的事务可以看到它们各自事务开始时的数据快照。这包括:

  • 当一个事务读取数据时,它可以通过Undo Log找到该数据在事务开始时的版本。

  • 当一个事务更新数据时,Undo Log保存了更新前的旧版本,以便其他事务仍然可以访问旧数据。

Mermaid图示

以下是Undo Log在事务回滚和MVCC中作用的Mermaid图示:

Undo Log 在事务回滚中的作用

Undo Log 在MVCC中的作用

Redo Log(重做日志)

事务的持久性(Durability)保障

Redo Log 是实现事务持久性的关键机制。它确保了即使在系统崩溃或电源故障的情况下,已提交的事务更改也不会丢失。通过记录事务对数据页的修改,系统可以在重启后重放这些日志,从而恢复到事务提交时的状态。

WAL(Write-Ahead Logging)技术

Write-Ahead Logging(WAL)是一种日志记录技术,要求在对数据页进行任何修改之前,必须先将修改记录到日志中。这意味着日志的写入操作必须在数据页的修改之前完成。WAL技术是实现Redo Log的基础,确保了数据的完整性和一致性。

Redo Log Buffer和刷盘时机
  • Redo Log Buffer 是InnoDB存储引擎中的内存结构,用于暂存事务的修改操作。

  • 刷盘时机 是指将Redo Log Buffer中的数据刷新到磁盘上的时机。这通常发生在以下几种情况:

    • 事务提交时。

    • Redo Log Buffer占用的空间达到一定阈值。

    • 系统后台线程定期刷新。

Redo Log的循环写入机制

Redo Log 使用固定大小的日志文件组,当一个日志文件写满后,会回绕到组中的下一个文件继续写入。这种循环写入机制允许Redo Log无限期地记录事务日志,只要有足够的磁盘空间。当系统需要释放旧的Redo Log记录时,会通过checkpoint机制来标记哪些日志已经过时,可以被覆盖。

Mermaid图示

以下是Redo Log在事务持久性保障和WAL技术中的Mermaid图示:

Redo Log 持久性保障流程

WAL 技术流程

这两个图示分别展示了Redo Log在事务持久性保障中的角色以及WAL技术确保数据修改前日志记录的流程。

Binlog(归档日志)

记录数据库变更历史

Binlog 记录了数据库所有表结构变更和数据修改的操作,但不记录查询和非修改性的命令(如SHOW)。这为数据库的变更历史提供了完整的记录。

数据备份和主从复制的作用
  • 数据备份:Binlog 可用于数据恢复,当数据库发生故障时,可以使用Binlog来回溯到故障前的状态。

  • 主从复制:Binlog 是实现MySQL主从复制的关键,主服务器上的所有变更都会记录在Binlog中,并复制到从服务器上,以保持数据的一致性。

Binlog与Redo Log的区别
  • 记录内容:Redo Log 是物理日志,记录了页级别的变更;Binlog 是逻辑日志,记录了SQL语句及其执行结果。

  • 作用域:Redo Log 主要用于崩溃恢复,确保事务的持久性;Binlog 用于复制和数据恢复。

  • 存储:Redo Log 存储在InnoDB存储引擎中,Binlog 存储在MySQL服务器层。

  • 写入时机:Redo Log 在事务提交时写入,Binlog 可以在事务提交前写入。

Mermaid图示

以下是Binlog在数据库变更历史记录、数据备份和主从复制中作用的Mermaid图示:

Binlog(归档日志)

记录数据库变更历史

Binlog 是 MySQL 的二进制日志,它记录了数据库中所有数据变更的操作,包括数据的增加、修改和删除。这为数据库的变更历史提供了详细的记录,有助于进行数据恢复和分析。

数据备份和主从复制的作用
  • 数据备份:Binlog 可以用于数据的增量备份,只记录数据变更的部分,而不是整个数据库的完整副本。

  • 主从复制:Binlog 是实现 MySQL 主从复制的核心,主服务器上的所有变更操作都会被记录在 Binlog 中,并被复制到从服务器上,以保持数据的一致性。

Binlog 与 Redo Log 的区别
  1. 记录内容

    1. Redo Log 是 InnoDB 存储引擎的物理日志,记录了数据页的变化,用于确保事务的持久性。

    2. Binlog 是 MySQL 服务器层面的逻辑日志,记录了所有数据变更的 SQL 语句,用于复制和恢复。

  2. 作用域

    1. Redo Log 主要用于崩溃恢复,确保事务提交后的数据不丢失。

    2. Binlog 用于复制(包括主从复制和组复制)和数据恢复。

  3. 存储位置

    1. Redo Log 存储在 InnoDB 的存储引擎空间。

    2. Binlog 存储在 MySQL 服务器的数据目录下。

  4. 写入时机

    1. Redo Log 在事务提交时写入,确保了数据的持久性。

    2. Binlog 可以设置为在事务提交前写入,增加了复制的并发性,但牺牲了一定的数据一致性保证。

  5. 循环使用

    1. Redo Log 使用循环写入,固定大小的日志文件组,写满后循环覆盖。

    2. Binlog 也使用循环写入,但通常配置为保留一定数量的日志文件,以支持复制和恢复。

Mermaid 图示

以下是 Binlog 与 Redo Log 区别的 Mermaid 图示:

这个图示展示了 Binlog 和 Redo Log 的主要区别和它们在 MySQL 中的不同应用。

MySQL I/O模型及优化

I/O模型对性能的影响

MySQL数据库的性能在很大程度上受I/O模型的影响。I/O模型决定了数据如何在数据库和存储介质之间传输,常见的I/O模型包括:

  1. 同步I/O(Synchronous I/O):在这种模型下,数据操作请求(如读取或写入)会立即被执行,并且请求进程会等待操作完成。这可能会导致高延迟,尤其是在高负载情况下。

  2. 异步I/O(Asynchronous I/O):与同步I/O不同,异步I/O允许请求进程在数据操作执行时继续执行其他任务。当I/O操作完成时,进程会被通知。这可以提高性能,因为它允许更高效的资源利用。

  3. 直接I/O(Direct I/O):在直接I/O中,数据直接在应用程序和存储介质之间传输,绕过操作系统的缓存。这可以减少数据复制的开销,但可能会增加磁盘碎片。

  4. 缓冲I/O(Buffered I/O):这是最常见的I/O模型,数据操作首先在内存中进行,然后批量刷新到磁盘。这可以减少磁盘I/O操作的次数,提高性能。

优化磁盘I/O的方法

为了提高MySQL数据库的性能,可以采取以下一些优化磁盘I/O的方法:

  1. 使用高性能存储:使用更快的存储设备,如SSD,可以显著减少I/O操作的延迟。

  2. 调整InnoDB缓冲池大小:InnoDB缓冲池可以缓存频繁访问的数据和索引,适当增加其大小可以减少磁盘I/O。

  3. 使用内存数据库表:对于读密集型的应用,可以考虑将某些表存储在内存中。

  4. 优化查询和索引:优化查询语句和索引可以减少数据访问的I/O操作次数。

  5. 使用RAID技术:通过RAID(独立磁盘阵列)技术,可以提高数据的读写性能和可靠性。

  6. 调整操作系统的I/O调度器:不同的I/O调度器可能对性能有不同的影响,选择合适的调度器可以提高性能。

  7. 使用固态硬盘缓存:使用固态硬盘作为缓存层,可以提高热点数据的访问速度。

  8. 异步I/O操作:在可能的情况下,使用异步I/O操作可以提高应用程序的响应性和吞吐量。

  9. 监控和分析I/O性能:定期监控I/O性能,分析瓶颈,并根据需要进行调整。

  10. 合理配置文件系统和磁盘:合理配置文件系统(如使用ext4、XFS等)和磁盘的参数,如块大小、文件分配策略等,可以提高I/O效率。

通过上述方法,可以有效地优化MySQL数据库的I/O性能,从而提高整体的数据库性能。

事务处理流程

事务是数据库操作的基本单位,它保证了一系列操作要么全部成功,要么全部失败。一个事务通常遵循以下步骤:

  1. 开始事务:通过BEGINSTART TRANSACTION语句开始一个新事务。

  2. 执行操作:执行一系列的数据库操作,如INSERTUPDATEDELETE等。

  3. 提交事务:如果所有操作都成功,通过COMMIT语句提交事务,使所有更改永久生效。

  4. 回滚事务:如果操作中出现错误,通过ROLLBACK语句撤销所有更改,返回到事务开始前的状态。

  5. 结束事务:提交或回滚后,事务结束。

一条SQL查询语句的生命周期

  1. 客户端请求:客户端发送SQL查询语句到数据库服务器。

  2. 解析:服务器解析SQL语句,检查语法正确性。

  3. 编译:将SQL语句编译成可执行的执行计划。

  4. 执行:根据执行计划,数据库引擎执行查询操作。

  5. 数据检索:从存储引擎检索数据。

  6. 返回结果:将查询结果发送回客户端。

  7. 日志记录:在适当的时候,操作会被记录到日志中,如Redo Log和Binlog。

Update语句的执行过程

  1. 请求Update:客户端发送UPDATE语句到服务器。

  2. 解析与编译:服务器解析UPDATE语句,生成执行计划。

  3. 权限检查:检查用户是否有权限执行该更新操作。

  4. 查找数据:在相关表中查找需要更新的行。

  5. 记录Undo Log:在InnoDB存储引擎中,记录Undo Log以支持事务回滚。

  6. 应用更改:对找到的数据行应用更新。

  7. 记录Redo Log:记录Redo Log以确保事务的持久性。

  8. 提交事务:如果更新成功,提交事务,更改生效。

  9. 刷新Binlog:将事务的Binlog刷新到磁盘,用于复制和恢复。

  10. 返回结果:向客户端返回操作结果,如受影响的行数。

事务的ACID属性(原子性、一致性、隔离性、持久性)在整个过程中得到保证,确保了数据的完整性和可靠性。

主从复制机制

主从复制是数据库领域中用于数据高可用性和负载均衡的一种技术。它允许将一个数据库服务器(主服务器)的数据复制到一个或多个服务器(从服务器)。

主从复制的实现原理
  1. 二进制日志(Binary Logging):主服务器上的所有修改操作都被记录在二进制日志(Binlog)中。

  2. I/O线程:从服务器上的I/O线程连接到主服务器,请求获取Binlog中的事件。

  3. 记录中继日志(Relay Log:I/O线程将接收到的Binlog事件写入从服务器的中继日志。

  4. SQL线程:从服务器上的SQL线程处理中继日志中的事件,并在从服务器上执行相同的修改操作,以保持数据的一致性。

  5. 数据一致性:通过这种方式,主服务器上的数据变更被复制到从服务器,确保了数据的一致性。

主从复制的三种模式
  1. 同步复制(Synchronous Replication)

    1. 在这种模式下,主服务器在提交事务前等待所有从服务器确认已接收并开始执行事务的Binlog事件。

    2. 优点是保证了数据的强一致性,但可能会牺牲性能。

  2. 异步复制(Asynchronous Replication)

    1. 主服务器在提交事务后立即返回,不需要等待从服务器的确认。

    2. 优点是提高了性能,但可能会在主服务器故障时导致数据丢失。

  3. 半同步复制(Semi-synchronous Replication)

    1. 这是MySQL 5.7及以后版本提供的一种复制方式,主服务器在提交事务前至少等待一个从服务器确认已接收Binlog事件。

    2. 优点是提供了比异步复制更强的数据一致性保证,同时保持了相对较高的性能。

Mermaid图示

以下是主从复制过程的Mermaid图示:

这个图示展示了主从复制的基本流程,从Binlog的生成到从服务器上的SQL线程执行,确保了数据的一致性。

Binlog的刷盘时机和过程

Binlog是MySQL中非常重要的日志,记录了所有的修改操作,用于数据恢复和复制。Binlog的刷盘时机和过程如下:

  1. Binlog Cache的作用

    1. Binlog Cache是MySQL服务器层用来暂存事务日志的内存区域。

    2. 每个线程都有自己的Binlog Cache,用于缓存即将写入Binlog文件的事务日志。

  2. 写入Binlog Cache

    1. 当事务执行修改操作时,相关的日志首先被写入到Binlog Cache。

  3. Binlog刷盘的触发条件

    1. 事务提交:最常见的触发条件是事务提交,此时必须将事务的日志写入Binlog文件以确保持久性。

    2. Binlog Cache达到一定大小:如果Binlog Cache的大小超过了binlog_cache_size系统变量设定的值,内容会被写入到Binlog文件。

    3. 服务器设置:某些设置如expire_logs_daysmax_binlog_size会触发旧Binlog文件的删除或改名,这时也会触发刷盘。

    4. I/O线程调度:MySQL的I/O线程会定期将Binlog Cache中的内容刷新到Binlog文件。

  4. 刷盘过程

    1. 在触发条件满足时,Binlog Cache中的内容会被写入到Binlog文件。

    2. 写入操作是顺序进行的,保持事务日志的顺序性和完整性。

    3. 写入完成后,Binlog Cache被清空,为新的事务日志腾出空间。

  5. 保证数据一致性

    1. 在事务提交时,只有当Binlog成功写入磁盘后,事务才会被视为提交成功,从而保证了数据的一致性。

Mermaid图示

以下是Binlog刷盘时机和过程的Mermaid图示:

这个图示展示了事务日志从Binlog Cache写入Binlog文件的过程,以及触发条件。

数据库的高可用性和灾难恢复

使用Redo Log和Binlog进行数据恢复
  • Redo Log:用于保证事务的持久性。在系统崩溃后,可以使用Redo Log中的日志记录来重做未提交的事务,从而恢复数据到最后一次成功提交的状态。

  • Binlog:记录了所有数据变更的历史,可以用于数据恢复和主从复制。在数据丢失的情况下,可以使用Binlog来回放所有的变更操作,恢复数据。

高可用性架构设计
  • 主从复制:通过设置一个主数据库和多个从数据库,可以在主数据库发生故障时切换到从数据库,保证服务的连续性。

  • 故障切换:自动化的故障检测和切换机制,确保在主数据库不可用时自动切换到备用数据库。

  • 负载均衡:使用负载均衡技术分散请求到多个数据库,提高系统的处理能力和可用性。

  • 数据备份:定期备份数据,包括全量备份和增量备份,以便在灾难发生时能够快速恢复数据。

参数配置对日志系统的影响
  • innodb_flush_log_at_trx_commit参数:控制事务提交时Redo Log的刷盘行为,对数据的持久性和系统的写入性能有直接影响。

    • 0:事务提交时不刷盘,提高性能,但在崩溃时可能丢失最后一次提交的事务数据。

    • 1:每次事务提交都刷盘,保证数据的持久性,但可能降低写入性能。

    • 2:事务提交时将日志写入到磁盘上的文件系统缓存,然后由操作系统决定何时刷新到磁盘,平衡性能和数据安全。

Mermaid图示

以下是使用Redo Log和Binlog进行数据恢复的Mermaid图示:

这个图示展示了在系统崩溃后,如何使用Redo Log和Binlog来恢复数据。

数据库的高可用性和灾难恢复

使用Redo Log和Binlog进行数据恢复
  1. Redo Log:

    1. 用于事务的持久性保障,确保在系统崩溃后,可以恢复未提交的事务更改。

    2. 在恢复过程中,Redo Log中的日志条目被重新执行,以确保所有更改被正确地应用到数据库中。

  2. Binlog:

    1. 记录了所有数据库的变更操作,包括数据的增加、修改和删除。

    2. 在数据丢失的情况下,可以使用Binlog从头开始回放所有操作,恢复到特定的时间点。

  3. 数据恢复过程:

    1. 首先使用Binlog回放所有变更,恢复到最后一次备份的状态。

    2. 然后应用Redo Log中的日志,恢复自最后一次备份以来的所有事务更改。

高可用性架构设计
  1. 主从复制:

    1. 通过设置一个主数据库和多个从数据库,实现数据的实时复制和备份。

  2. 故障切换:

    1. 实现自动化的故障检测和故障转移,确保主数据库故障时,从数据库可以迅速接管服务。

  3. 负载均衡:

    1. 使用负载均衡器分散请求,提高系统的吞吐量和响应能力。

  4. 多数据中心:

    1. 在不同的地理位置设置数据中心,以防止区域性故障导致整个系统不可用。

  5. 数据备份:

    1. 定期进行数据备份,包括全量备份和增量备份,确保在灾难发生时可以快速恢复。

  6. 监控和报警:

    1. 实施全面的监控系统,及时发现和响应系统异常。

  7. 灾难恢复计划:

    1. 制定详细的灾难恢复计划和流程,定期进行演练,确保在真实灾难发生时能够迅速有效地响应。

Mermaid图示

以下是数据库高可用性和灾难恢复的Mermaid图示:

这个图示展示了高可用性架构的关键组件和流程,包括主从复制、故障切换、负载均衡、数据备份和监控报警系统。

参数配置对日志系统的影响

数据库的参数配置对日志系统的性能和行为有显著影响。合理的参数配置可以在保证数据安全性的同时优化性能。

innodb_flush_log_at_trx_commit参数的作用

innodb_flush_log_at_trx_commit是InnoDB存储引擎的一个关键参数,控制着事务提交时Redo Log的刷盘行为:

  • 值0:事务提交时不进行刷盘操作,由InnoDB存储引擎的后台线程定期刷新到磁盘。这种方式可以提高写入性能,但在系统崩溃时可能会丢失最后一次提交的事务数据。

  • 值1:每次事务提交时,都会将Redo Log从Redo Log Buffer强制刷新到磁盘。这种方式确保了数据的持久性,但可能会降低写入性能。

  • 值2:事务提交时,将Redo Log刷新到文件系统的Page Cache,然后由操作系统决定何时将其刷新到磁盘。这种方式在大多数现代操作系统中提供了足够的数据安全性,同时保持了较高的性能。

日志系统参数调优
  1. 确定适当的刷盘策略

    1. 根据应用场景和数据安全性要求,选择合适的innodb_flush_log_at_trx_commit值。

  2. 调整Redo Log文件大小

    1. 通过innodb_log_file_size参数调整Redo Log文件的大小,平衡日志文件的数量和每个文件的大小。

  3. 设置Redo Log缓冲区大小

    1. 通过innodb_log_buffer_size参数设置Redo Log Buffer的大小,影响内存中日志缓存的能力。

  4. 优化Binlog配置

    1. 调整expire_logs_daysmax_binlog_size等参数,控制Binlog文件的生命周期和大小。

  5. 监控并调整I/O性能

    1. 监控磁盘I/O性能,根据需要调整I/O调度器和文件系统的配置。

  6. 考虑使用组提交

    1. 通过组提交技术,将多个事务的日志一起刷新到磁盘,减少I/O操作的次数。

  7. 调整InnoDB缓冲池大小

    1. 通过innodb_buffer_pool_size参数调整InnoDB缓冲池的大小,减少对物理磁盘的访问。

  8. 定期审查和测试配置

    1. 定期审查当前的配置,并在测试环境中进行测试,以确保配置满足性能和数据安全的要求。

  9. 考虑硬件特性

    1. 根据存储硬件的特性(如SSD vs. HDD)调整日志系统的配置,以最大化性能。

通过细致地调整这些参数,可以优化数据库的日志系统,以满足特定的性能要求和数据安全标准。

相关文章:

mysql中log

目录 MySQL 日志系统概述 日志类型 日志的作用和重要性 Mermaid图示 1. Undo Log 和 Redo Log 的协同工作图 2. Redo Log 确保持久性的流程图 Undo Log(回滚日志) 事务的原子性(Atomicity)保障 事务回滚机制 MVCC&#…...

iOS Object-C 创建类别(Category) 与使用

有时候使用系统给出类或者第三方的类,但是呢它们自带的属性和方法又太少,不够我们的业务使用,这时候就需要给“系统的类或者第三方类”创建一个类别(Category),把自己的想添加的属性和方法写进来. Category模式用于向已经存在的类添加方法从而达到扩展已有类的目的 一:创建Ca…...

Rocky系统部署k8s1.28.2单节点集群(Containerd)+Kuboard

目录 Kubernetes介绍 Kubernetes具备的功能 Kubernetes集群角色 Master管理节点组件 Node工作节点组件 非必须的集群插件 Kubernetes集群类型 Kubernetes集群规划 集群前期环境准备 开启Bridge网桥过滤 关闭SWAP交换分区 安装Containerd软件包 K8s集群部署方式 集…...

Springboot整合Flowable入门-学习笔记

目录 1、定义流程(画图) 2、Springboot部署流程 3、Springboot删除所有流程 4、Springboot根据 流程部署ID 查询 流程定义ID 5、Springboot启动(发起)流程 6、Springboot查询任务 6.1全部任务 6.2我的任务(代办任务) 7、…...

C语言常见的题目

1、 从源码到可执行文件会经历怎样的过程? 预编译:去掉空格、注释,处理预定义的指令,生成处理后的源代码文件。 编译:翻译成汇编代码,生成汇编文件。 汇编:翻译成机器码,生成一个或…...

Android13适配记录

多语言支持&#xff0c;此功能在国内被阉割 配置后在设置内可以选择 <?xml version"1.0" encoding"utf-8"?> <locale-config xmlns:android"http://schemas.android.com/apk/res/android"><locale android:name"zh" …...

Android TV上OTT PWA应用开发的播放器选择:video.js vs exoplayer

跨平台 OTT PWA 应用开发&#xff0c;最方便的当然是选用 video.js 库。但是既然是安卓平台&#xff0c;exoplayer 看起来总是最稳妥的选择 介绍 Exoplayer 是 Android media3 的一个实现&#xff0c;以前是独立出来的&#xff0c;现在已经合并到 androidx.media3 中了。 Vid…...

24.8.14 《CLR via C#》 笔记12

第十五章 枚举类型和位标志 使用枚举类型而不是硬编码的理由&#xff1a;枚举类型更易编写&#xff0c;阅读和维护&#xff1b;枚举类型是强类型枚举类型是值类型&#xff0c;不能定义任何方法&#xff0c;属性或事件&#xff0c;可利用扩展方法向枚举类型添加方法枚举类型定义…...

P2801 教主的魔法

[题目通道](教主的魔法 - 洛谷) 摘要 分块&#xff0c;是一种优雅的暴力&#xff0c;它通过对数列分段&#xff0c;完成对数列一些区间操作和区间查询的操作&#xff0c;是一种根号算法。 这篇学习笔记&题解是本萌新在学习分块过程中的一些感悟&#xff0c;希望能够帮助…...

Go 语言channel的应用场景及使用技巧

通过反映的方式执行 select 语句。这在处理有很多 case 子句,尤其是不定长 case 子句的情况时非常有用。 1. 使用反射操作 select 和 channel 使用 select 语句可以处理 chan 的 send 和 recv, send 和 recv 都可以作为 case 子句。如果需要同时处理两个 chan, 则可以写成下面…...

QLabel设置图像的方法+绘制文本换行显示

1、QLabel设置图像有两种方法 (1) void setPicture(const QPicture &); (2) void setPixmap(const QPixmap &); QPicture和QPixmap都是继承于QPaintDevice&#xff0c;它们都可以通过加载图片的方式获取&#xff1a;bool load(QIODevice *dev, const char *format …...

LVS原理及相关配置

1. 描述以及工作原理 1. 什么是 LVS linux virtural server 的简称&#xff0c;也就是 linxu 虚拟机服务器&#xff0c;这是一个 由章文嵩博士发起的开源项目&#xff0c;官网是 http://www.linuxvirtualserver.org,现在 lvs 已经是 linux 内核标 准的一部分&#xff0c;使用…...

webrtc一对一视频通话功能实现

项目效果 实现原理 关于原理我就不做说明&#xff0c;直接看图 WebRTC建立的时序图 系统用例逻辑 搭建环境 turn服务器&#xff1a;Ubuntu24.04搭建turn服务器 mkcert的安装和使用&#xff1a;配置https访问 必须使用https协议&#xff0c; 由于浏览器的安全策略导致的&am…...

通道(channel)传递数据的例子写一个

当然&#xff01;以下是一个简单的 Go 程序示例&#xff0c;展示了如何使用通道&#xff08;channel&#xff09;在两个 goroutine 之间传递数据。示例代码 go package mainimport ("fmt""time" )// 发送数据到通道的 goroutine func sendData(ch chan int…...

Vue3+Echarts+饼图环形图

记得给容器宽高 <div id"leftChartguawang" style"height: 28vh"></div> 配置函数 const leftChartguawang () > {const chartBox echarts.init(document.getElementById(leftChartguawang))let datas [[{ name: 居民节能建筑, value…...

Python while编程题目|AI悦创Python一对一教学辅导

你好&#xff0c;我是悦创。 以下是十道有创意的while循环编程题目&#xff0c;每道题目都有一定的难度&#xff0c;适合锻炼编程逻辑和思维能力。 题目1&#xff1a;旋转字符串 描述&#xff1a;给定一个字符串&#xff0c;每次循环将字符串的第一个字符移到末尾&#xff0…...

C语言 | Leetcode C语言题解之第324题摆动排序II

题目&#xff1a; 题解&#xff1a; static inline void swap(int *a, int *b) {int c *a;*a *b;*b c; }static inline int partitionAroundPivot(int left, int right, int pivot, int *nums) {int pivotValue nums[pivot];int newPivot left;swap(&nums[pivot], &a…...

Docker③_VMware虚拟机和Docker的备份与恢复

目录 1. VMware虚拟机的快照备份 1.1 VMware本机的快照备份 1.2 VMware快照备份到另一电脑 2. Docker知识点 2.1 Docker镜像和容器的关系 2.2 Docker的存储卷 2.3 Docker命令简介 2.4 删除Anylink镜像 3. Docker备份和恢复 3.1 确定要回滚的容器和版本 3.2 备份当前…...

【EMC专题】ESD抑制器简要介绍

在ESD保护器件中可以分为陶瓷基类型和半导体基类型。其中有一类陶瓷基类型,使用的机制是电极间放电方法的产品就是ESD抑制器。本文章简要介绍了ESD抑制器的特点、基本结构和特性。 ESD抑制器的特点 ESD抑制器是间隙型的ESD(静电放电 Electrostatic Discharge)对策保护元件,…...

贷齐乐系统最新版SQL注入(绕过WAF可union select跨表查询)

目录 标题&#xff1a;贷齐乐系统最新版SQL注入&#xff08;绕过WAF可union select跨表查询&#xff09; 内容&#xff1a; 一&#xff0c;环境部署 二&#xff0c;源码分析 三&#xff0c;sql注入 总结&#xff1a; [回到顶部]&#xff08;#article_top&#xff09; 一&am…...

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比!

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比! 文章目录 一. 虚拟机(Virtual Machine,VM)与Docker对比!1. 定义这两种技术2. 工作原理3. 关于如何选择适合工作负载的技术的指导二. 参考文献Docker 只是一个轻量级的虚拟机吗?虽然二者确实有一个共同点,即 虚…...

基于SpringBoot+Vue框架的租车管理系统

文章目录 一、项目介绍二、项目类型三、技术栈介绍1.客户端技术栈2.服务端技术栈 四、项目创新点五、项目功能介绍1.客户端功能2.服务端功能 六、项目的主要截图页面如下展示1.客户端展示2.服务端展示 七、项目源码 一、项目介绍 ​大家好&#xff0c;我是执手天涯&#xff0c;…...

HAProxy基本配置及参数实操

目录 ​编辑什么是负载均衡 为什么用负载均衡 四层和七层的区别 实验环境 实验步骤 webserver上安装nginx 启动nginx 安装haproxy 编辑配置文件 多进程 多线程 SORRY SERVER 访问重定向 maxconne最大可承受连接 socat 工具 常用示例 ha p r ox y 的 算 法 静 …...

go-zero中间件的使用

一、自定义中间件 1、在api中在服务中定义一个中间件,名字随便取 type PostDemoReq {Name string json:"name" validate:"required" // 姓名Age int64 json:"age" validate:"required,gte1,lte130" // 年龄// optional 表示可选,omi…...

六、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色优化超时和线程

实现通过ESP32S3连接Wi-Fi并使用Web页面控制WS2812灯珠的颜色&#xff0c;可以使用ESP32的WebServer库来创建一个简单的Web界面。通过这个界面&#xff0c;可以动态地控制灯珠的显示效果。 针对 五、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色…...

(el-Time-Picker)操作(不使用 ts):Element-plus 中 TimePicker 组件的使用及输出想要时间格式需求的解决过程

Ⅰ、Element-plus 提供的 TimePicker 时间选择器组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 TimePicker 组件情况&#xff1a; 其一、Element-ui 自提供的 TimePicker 代码情况为(示例的代码)&#xff1a; // Element-plus 提供的组件代码: <template>…...

UIAbility组件基础(一)

一、概述 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。UIAbility组件是系统调度的基本单元&#xff0c;为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。 U…...

神经网络的数学原理

前言:Hello大家好,我是小哥谈。人工智能技术的发展与成功应用已经成为21世纪科技领域最大的新现象。然而,科学地理解人工智能原理已经超出了现有科学体系的范畴。显然,人工智能是人类科学技术发展的必然结果,人工智能科学也将是人类科学进步与发展必然实现的目标🌈 …...

Java设计模式-抽象工厂模式-一次性理解透

1. 抽象工厂模式简介 抽象工厂设计模式是创建型模式之一。抽象工厂模式与工厂模式几乎相似&#xff0c;只是它更像工厂中的工厂。 如果您熟悉Java 中的工厂设计模式&#xff0c;或看过上一篇我写的“java简单工厂模式”&#xff0c;您会注意到我们有一个工厂类。此工厂类根据…...

day16-测试自动化之selenium的PO模式

一、PO模式介绍 PO&#xff08;Page Object&#xff09;模式是一种在自动化测试中常用的设计模式&#xff0c;将页面的每个元素封装成一个对象&#xff0c;通过操作对象来进行页面的交互。 一般分为六个版本&#xff0c;现在大部分企业都用的V4版本&#xff0c;三层结构…...

阿里云个人网站制作/苏州百度推广分公司电话

2019独角兽企业重金招聘Python工程师标准>>> 深入原理分析与解析&#xff08;本文并未抄录&#xff09;&#xff1a;http://www.freebuf.com/articles/web/40520.html 下面你将要看到的来自http://www.cnblogs.com/bangerlee/archive/2013/04/06/3002142.html xss表…...

网站建设 自助建站/最近几天的新闻大事

关闭防火墙&#xff1a; 控制面板-〉防火墙-〉不启用防火墙-〉高级设置-〉域防火墙设置-〉关闭防火墙转载于:https://www.cnblogs.com/promise-7/archive/2013/04/26/3044224.html...

做海外贸易网站/网站推广的渠道有哪些

uniapp主要是vue语法 uni.redirectTo(OBJECT) 登录成功后跳转用户页&#xff0c;发现用uni.navigateBack()可以成功跳转&#xff0c;但是用uni.redirectTo却没有效果&#xff0c;之后看了文档&#xff0c;发现跳转tabBar时不能用uni.redirectTo&#xff0c;需要用uni.switchTa…...

公司网站建设需求书/亚马逊排名seo

在JMeter BeanShell 前置处理器中&#xff0c;您可以使用下面的代码来定义长度为2的数组&#xff1a; int[] myArray new int[2]; myArray[0] 1; myArray[1] 2;该代码创建了一个名为"myArray"的整型数组&#xff0c;并初始化为具有两个元素&#xff0c;分别为1和2。…...

网站建设的技术目标/百度下载链接

networkcomms.net 来自英国的网络通信框架 官方网址 www.networkcomms.net 中文网址www.networkcomms.cn 在网络通信程序中&#xff0c;本地的类或者对象&#xff0c;要传输到通信的另一端&#xff0c;在网络上传输的时候是二进制流的形式。 那么在发送消息的时候要把对象序列化…...

卡盟网站怎么做图片素材/班级优化大师怎么加入班级

vantui是一个基于Vue.js的组件库&#xff0c;它提供了文件上传组件&#xff0c;可以方便地在Vue.js应用中实现文件上传功能。使用vantui文件上传组件&#xff0c;你可以在网页中选择文件并将其上传到服务器。它支持多文件上传、文件限制、文件类型限制等功能。使用vantui文件上…...