Mysql 中的 binlog、redolog、undolog

Binlog

MySQL中的Binlog(Binary Log) 是 MySQL 用來記錄數據庫所有數據更改操作的日志文件。它是 MySQL 數據庫的核心組件之一,廣泛應用于 數據復制數據恢復故障恢復 等操作中。

Binlog的主要作用:

  1. 數據復制(Replication)
    • Binlog 是 MySQL 主從復制(Master-Slave Replication)架構的核心。
    • 在主服務器上啟用 Binlog 后,所有對數據庫進行更改的 SQL 語句(例如 INSERTUPDATEDELETE 等)都會被記錄在 Binlog 文件中。
    • 從服務器會讀取主服務器的 Binlog,并執行相應的操作,保證從服務器的數據與主服務器一致。
  2. 數據恢復(Point-in-time Recovery,PITR)
    • Binlog 允許數據庫進行 點-in-time 恢復,即將數據庫恢復到某個時間點的狀態。
    • 在主數據庫發生災難或崩潰后,可以通過備份(如數據文件的備份)和 Binlog(記錄從備份時間以來的所有數據修改)來恢復數據庫的狀態。
  3. 審計和日志分析
    • Binlog 可以作為數據庫的操作審計工具,記錄所有更改數據庫的數據修改操作。
    • 這些日志也可以用來做性能分析和查詢優化。
  4. 復制故障恢復
    • 如果從服務器的數據丟失或損壞,可以利用主服務器的 Binlog 來重新同步數據,從而恢復復制鏈路。

Binlog的工作機制:

  • 記錄數據變更:Binlog 記錄的是所有修改數據庫內容的操作,而不包括查詢操作。例如,INSERTUPDATEDELETE 操作都會被記錄在 Binlog 中。
  • 二進制格式:Binlog 的格式不是純文本,而是以二進制格式存儲,這使得它在存儲和傳輸上更高效。
  • 以事件為單位:每一條 Binlog 記錄都是一個 事件(event),每個事件表示一次數據庫變更操作。例如,INSERT 操作會被記錄為一條插入事件。
  • 文件輪換:Binlog 并不是一個單一的文件,它由一系列的文件組成。通常,文件名為 mysql-bin.000001mysql-bin.000002 等。當文件達到一定大小時,MySQL 會自動輪換生成新的文件。
  • 延遲和異步:Binlog 是異步地記錄數據的,這意味著當執行某個 SQL 語句時,MySQL 并不會立刻寫入 Binlog,而是異步地將數據記錄到 Binlog 文件中。

Binlog的格式:

MySQL 支持三種 Binlog 格式,每種格式在記錄數據時有不同的粒度:

  1. Statement-based Logging (SBL,基于語句的日志)
    • 記錄實際執行的 SQL 語句。這是最常見的格式。
    • 優點:日志文件較小,便于管理和傳輸。
    • 缺點:某些 SQL 語句可能在主從服務器上有不同的執行結果,導致主從數據不一致。例如,涉及到 NOW()RAND() 等函數的 SQL 語句。
  2. Row-based Logging (RBL,基于行的日志)
    • 記錄每一行數據的修改操作。這意味著每條 INSERTUPDATEDELETE 操作都會記錄具體的行變化。
    • 優點:在復制過程中不容易出現數據不一致的問題。
    • 缺點:日志文件可能非常龐大,尤其是當數據表更新非常頻繁時。
  3. Mixed Logging (混合日志)
    • 結合了 Statement-basedRow-based 兩種格式。MySQL 會根據具體的 SQL 語句決定采用哪種日志格式。
    • 優點:在大多數情況下,它可以兼顧性能和一致性,避免 Statement-based 和 Row-based 的缺點。
    • 缺點:相較于純 Statement-based 或 Row-based,配置和管理稍顯復雜。

Binlog的配置和啟用:

在 MySQL 中啟用 Binlog 非常簡單,只需要在 MySQL 配置文件(my.cnfmy.ini)中設置 log_bin 選項即可。

例如:

[mysqld]
log_bin = /var/log/mysql/mysql-bin.log

可以通過設置 binlog_format 來選擇日志格式:

[mysqld]
binlog_format = ROW   # 可選的值:STATEMENT, ROW, MIXED

常見的 Binlog 文件操作:

  • 查看當前的 Binlog 文件:可以使用 SHOW MASTER STATUS; 命令查看當前正在使用的 Binlog 文件和位置。

    示例:

    SHOW MASTER STATUS;
    

    輸出示例:

    +------------------+----------+--------------+------------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set|
    +------------------+----------+--------------+------------------+------------------+
    | mysql-bin.000012 |  107     |              |                  |                  |
    +------------------+----------+--------------+------------------+------------------+
    
  • 查看 Binlog 內容:可以使用 mysqlbinlog 工具查看 Binlog 文件的內容。

    示例:

    mysqlbinlog /var/log/mysql/mysql-bin.000001
    
  • 清理過期的 Binlog 文件:可以使用 PURGE BINARY LOGS 命令刪除舊的 Binlog 文件,防止它們占用過多磁盤空間。

    示例:

    PURGE BINARY LOGS TO 'mysql-bin.000010';
    

總結:

MySQL 中的 Binlog 是一種記錄數據庫所有修改操作的日志文件,主要用于 數據復制崩潰恢復數據恢復。它能夠幫助 MySQL 在主從復制架構中同步數據,并支持 點-in-time 恢復。Binlog 采用二進制格式,支持多種格式(語句型、行型、混合型),并且可以通過配置文件進行啟用和管理。

Redo Log

在 MySQL 中,Redo LogInnoDB 存儲引擎用于實現 事務持久性崩潰恢復 的關鍵機制之一。Redo Log 記錄了對數據庫所做的 已提交事務的所有修改操作,并且能夠在系統崩潰后恢復數據到崩潰之前的狀態。下面詳細介紹 Redo Log 的工作原理、作用以及如何配置。

1. Redo Log 的作用

  • 事務持久性(Durability):在事務提交時,Redo Log 確保事務的修改操作被永久記錄下來,即使數據庫崩潰,已提交的事務依然可以恢復。這是保證 ACID(原子性、一致性、隔離性、持久性)持久性 的一個重要環節。
  • 崩潰恢復:在 MySQL 或操作系統崩潰時,Redo Log 使得 InnoDB 存儲引擎能夠恢復到崩潰時的最后一致性狀態。所有已提交事務的操作都會在恢復時重新執行,以保證數據不丟失。

2. Redo Log 的工作原理

Redo Log 使用 Write-Ahead Logging (WAL) 策略,即在對數據進行修改之前,必須先將修改記錄寫入 Redo Log。具體流程如下:

  1. 事務開始
    • 當一個事務執行時,InnoDB 會將事務對數據的修改(如 INSERTUPDATEDELETE)記錄到 Redo Log 中。
    • 這些日志通常包含了對數據庫頁(即數據塊)的修改信息,而不是每個 SQL 語句的內容。
  2. 事務提交
    • 當事務提交時,InnoDB 會首先將所有已修改的數據寫入 Redo Log。
    • 提交的事務會被標記為已提交,系統會保證在崩潰恢復時,這些已提交的事務能夠被重做。
  3. 崩潰恢復
    • 當 MySQL 重新啟動時,InnoDB 會從 Redo Log 中讀取所有在崩潰之前已提交的事務,并將其“重做”(redo)到數據庫中,從而保證數據的持久性。
  4. 日志合并
    • 當 Redo Log 文件滿了時,InnoDB 會將日志中的數據刷新到磁盤中的數據庫頁上,并在日志中寫入新的內容。這是 Redo Log 的寫入操作。

3. Redo Log 的文件結構

  • Redo Log 文件:Redo Log 文件通常由多個文件組成,這些文件通常是 ib_logfile0ib_logfile1 等。每個文件是固定大小的,系統會按順序寫入這些日志文件,直到一個文件寫滿后,開始寫下一個文件。
  • Log Buffer:InnoDB 使用 Log Buffer 來緩存 Redo Log 的內容,在事務提交時會將 Log Buffer 中的數據刷新到磁盤上的 Redo Log 文件。
  • Flush 操作:定期或在某些操作后,InnoDB 會將 Log Buffer 中的日志數據刷新到磁盤的 Redo Log 文件。這個操作稱為 log flush

4. Redo Log 的類型

Redo Log 由兩種類型的日志組成:

  1. 事務日志:記錄所有事務對數據頁的修改。每次事務提交時,都會在 Redo Log 中寫入一條對應的日志記錄。

  2. 日志文件:Redo Log 數據存儲在磁盤上的日志文件中。每個日志文件大小是固定的(由 innodb_log_file_size 配置項設置)。日志文件寫滿后,InnoDB 會開始寫入下一個日志文件。

5. Redo Log 的配置

可以通過 MySQL 配置文件(my.cnfmy.ini)來調整 Redo Log 的行為,主要配置項包括:

  • innodb_log_file_size:設置每個 Redo Log 文件的大小。較大的文件可以減少磁盤 I/O,但也會增加崩潰恢復的時間。

    示例:

    innodb_log_file_size = 512M
    
  • innodb_log_buffer_size:設置 Log Buffer 的大小。較大的 Log Buffer 可以減少將日志從內存刷新到磁盤的次數,適用于高寫負載的系統。

    示例:

    innodb_log_buffer_size = 16M
    
  • innodb_log_files_in_group:設置 Redo Log 文件的數量,默認值為 2。這決定了 InnoDB 使用多少個日志文件。

    示例:

    innodb_log_files_in_group = 2
    
  • innodb_flush_log_at_trx_commit:決定何時將日志刷新到磁盤。默認值為 1,表示每次事務提交時都會刷新 Redo Log 到磁盤。可以通過調整此值來平衡性能和持久性。

    • 0:每秒刷新一次,不保證每次事務提交都寫入磁盤。
    • 1:每次事務提交時都刷新到磁盤,確保事務持久性。
    • 2:每次事務提交時將日志寫入磁盤,但不刷新(在操作系統緩存中)。

    示例:

    innodb_flush_log_at_trx_commit = 1
    

6. Redo Log 與 Undo Log 的關系

  • Redo Log:記錄已提交事務的修改操作,用于 數據恢復,即保證事務的 持久性
  • Undo Log:記錄未提交事務的操作,用于 事務回滾,即保證事務的 原子性

它們之間的關系:

  • Redo Log 保證了事務提交后的修改持久化,即便系統崩潰也不會丟失。
  • Undo Log 則用于回滾未提交的事務,確保事務的原子性。

7. Redo Log 的優勢

  • 提高性能:Redo Log 是異步寫入的,它能夠減少磁盤 I/O 操作,提升系統的性能。
  • 故障恢復:Redo Log 保證即使在發生系統崩潰的情況下,已提交的事務能夠被恢復。

8. Redo Log 與 MySQL 性能

  • 日志刷新頻率innodb_flush_log_at_trx_commit 的設置對性能有很大影響。設置為 1 可以保證事務的持久性,但每次提交都需要刷新日志到磁盤,可能會影響性能。設置為 2 或 0 可以提高性能,但在崩潰時可能丟失一些數據。
  • 日志文件大小innodb_log_file_size 設置過小可能會導致頻繁的日志寫入操作,過大則可能導致崩潰恢復時間過長。

總結:

Redo Log 是 InnoDB 存儲引擎中至關重要的組件,主要用于保證事務的 持久性崩潰恢復。它通過記錄事務的修改操作來確保數據不會丟失,并在崩潰恢復時重做提交的事務。你可以通過配置 innodb_log_file_sizeinnodb_log_buffer_sizeinnodb_flush_log_at_trx_commit 等參數來優化 Redo Log 的行為,從而平衡性能與數據可靠性。

Undo Log

MySQL 中,特別是使用 InnoDB 存儲引擎 時,Undo Log 是實現 事務的原子性一致性 的關鍵日志。它記錄了每個事務所做的 數據撤銷操作,以確保在事務出現錯誤或被回滾時,能夠撤銷事務所做的任何修改。Undo Log 是 事務日志 的一部分,在事務的生命周期內起著至關重要的作用。

1. Undo Log 的作用

Undo Log 的主要功能是為 事務回滾(rollback) 提供支持。當一個事務執行某些操作時,如果發生錯誤或者事務被顯式地回滾,那么這些操作就需要被撤銷。Undo Log 記錄了事務所做的修改的 前鏡像數據(Before Image),即修改之前的數據副本,以便在事務回滾時可以恢復到原始狀態。

具體作用包括:

  • 事務的回滾:當事務未提交就發生錯誤,或者調用了 ROLLBACK 命令,Undo Log 用于撤銷事務對數據的所有修改,恢復數據的初始狀態。
  • 保證事務的原子性(Atomicity):原子性要求事務要么完全執行,要么完全撤銷。Undo Log 通過記錄原始數據的副本來確保在事務失敗時能夠回滾,從而保證原子性。
  • 多版本并發控制(MVCC):Undo Log 也在 多版本并發控制(MVCC) 中起到作用,它使得事務可以讀取未提交的數據修改,從而在并發環境下提高事務的隔離性。

2. Undo Log 的工作原理

在事務執行過程中,InnoDB 會記錄所有數據的變化。在數據更新時,Undo Log 會保存這些變化前的數據副本。具體的步驟如下:

  1. 修改數據前記錄 Undo Log
    • 當一個事務對某個數據進行修改時,InnoDB 會首先將該數據的 修改前的值(Before Image) 記錄到 Undo Log 中。這個副本是為了保證在事務回滾時可以恢復數據到修改前的狀態。
  2. 修改數據
    • 事務會修改數據頁中的值,通常這些修改會先在內存中進行,而后再異步地刷新到磁盤。
  3. 事務提交或回滾
    • 如果事務 提交,Undo Log 中的記錄將被丟棄,因為修改已經成功寫入數據庫。
    • 如果事務 回滾,InnoDB 會使用 Undo Log 中的記錄來撤銷數據的修改,把數據恢復到修改之前的狀態。

3. Undo Log 的格式

Undo Log 記錄的是 數據頁(Data Page) 中的修改,具體來說,它記錄了數據的 前鏡像(Before Image)。每條 Undo Log 記錄通常包含以下內容:

  • 事務的 ID:用于標識日志屬于哪個事務。
  • 數據頁的 ID:標識修改的行所在的數據頁。
  • 記錄修改的 數據項:數據修改的具體內容,包括修改前的值(Before Image)。
  • 操作類型:例如 UPDATEDELETEINSERT 等。

4. Undo Log 和 MVCC(多版本并發控制)

Undo Log 在實現 多版本并發控制(MVCC) 中起到重要作用。MVCC 是通過為每一行數據維護多個版本來避免讀鎖,允許多個事務并發執行,且不會相互阻塞。

  • 讀取 數據時,InnoDB 會檢查當前事務的 提交時間戳,并通過 Undo Log 確保讀取到的數據是事務開始時可見的,避免讀取到未提交事務的修改。
  • 更新 數據時,InnoDB 會在 Undo Log 中保存舊的值,使得其他事務在讀取時可以看到舊版本的數據,避免讀取到不一致的結果。

5. Undo Log 和 Redo Log 的區別

Undo LogRedo Log 都是事務日志的一部分,但它們在數據庫事務的處理過程中有不同的作用:

  • Undo Log:用于 回滾 事務,記錄事務修改前的數據副本。它主要用于保證事務的 原子性一致性。當事務回滾時,Undo Log 被用來恢復數據。
  • Redo Log:用于 恢復 已提交的事務,記錄已提交事務的操作。當系統崩潰時,Redo Log 用來重做已提交事務的操作,確保事務的 持久性

6. Undo Log 存儲

Undo Log 并不是存儲在一個單獨的文件中,它存儲在 InnoDB 的 Undo 表空間(Undo Tablespace) 中。每個事務有一個獨立的 Undo Log。當事務提交時,Undo Log 中的記錄會被丟棄。Undo Log 主要用于保證事務的原子性,特別是在 崩潰恢復回滾操作 時。

7. Undo Log 的回滾與恢復

當事務需要回滾時,InnoDB 會讀取與該事務相關的 Undo Log 記錄,逐個恢復數據,直到回滾操作完成。具體步驟如下:

  • 事務回滾時,InnoDB 會按照 Undo Log 記錄的順序,依次將數據恢復到事務開始時的狀態。
  • 這些恢復操作是通過 撤銷修改 來實現的,即根據 Undo Log 中的記錄將數據恢復到修改之前的值。

8. Undo Log 的配置

在 MySQL 中,可以通過 innodb_undo_tablespaces 配置來指定 Undo Log 的存儲位置。默認情況下,Undo Log 存儲在系統表空間中,但你也可以將它們存儲在獨立的表空間中,這對于大規模數據庫尤其有用。

  • innodb_undo_tablespaces:設置用于 Undo Log 的表空間數量。可以通過增加這個參數的值來提高并發性能。

    innodb_undo_tablespaces = 2
    
  • innodb_undo_log_truncate:決定是否在使用完 Undo Log 后進行截斷操作。開啟這個選項可以減少存儲空間的浪費。

    innodb_undo_log_truncate = 1
    

9. Undo Log 的性能

  • 空間使用:Undo Log 會隨著事務的增長而增加,因此需要合理配置 Undo 表空間的大小,以避免存儲空間不足。
  • 性能影響:每次數據修改時,都需要在 Undo Log 中記錄修改前的值,這可能會帶來性能開銷,尤其是在事務較大或并發較高時。

10. Undo Log 的清理

當事務提交或回滾后,Undo Log 中的記錄會被清理。如果未及時清理,可能會導致 表空間碎片性能下降。MySQL 會定期清理這些日志,但在某些情況下(例如,大型事務),你可能需要手動清理。

總結

Undo Log 是 InnoDB 存儲引擎用于保證 事務原子性一致性 的關鍵日志,它通過記錄每次修改前的數據副本來支持事務的回滾操作。Undo Log 不僅用于事務回滾,還在 多版本并發控制(MVCC) 中起到關鍵作用,使得 InnoDB 能夠在高并發環境下保證數據的隔離性。在進行事務處理時,Undo Log 是確保數據庫操作正確執行的重要機制。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900107.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900107.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900107.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

object中的方法,和String類常用api

Java Object 類和 String 類常用 API 一、Object 類核心方法 Object 類是 Java 中所有類的超類,提供了以下重要方法: 1. 基本方法 方法描述重寫建議public boolean equals(Object obj)對象相等性比較必須重寫(同時重寫hashCode&#xff0…

Haskell語言的云安全

Haskell語言的云安全探索 引言 在信息技術迅猛發展的今天,云計算已經成為了企業和個人用戶不可或缺的重要組成部分。然而,隨著云計算的普及,相關的安全問題也日益突顯。云安全不僅涉及數據的安全性、隱私保護,更涵蓋了訪問控制、…

01背包問題的空間優化與邊界處題目解析

01背包問題的空間優化與邊界處題目解析 01背包問題是經典的動態規劃問題,旨在選擇若干物品裝入背包,使得總價值最大且不超過背包容量。每個物品只能選或不選(0或1),不可分割。 選和不選是01背包問題最大的特征 例題…

vue3+ts+element-plus 開發一個頁面模塊的詳細過程

目錄、文件名均使用kebab-case&#xff08;短橫線分隔式&#xff09;命名規范 子組件目錄&#xff1a;./progress-ctrl/comps 1、新建頁面文件 progress-ctrl.vue <script setup lang"ts" name"progress-ctrl"></script><template>&l…

Ubuntu上離線安裝ELK(Elasticsearch、Logstash、Kibana)

在 Ubuntu 上離線安裝 ELK(Elasticsearch、Logstash、Kibana)的完整步驟如下: 一.安裝驗證 二.安裝步驟 1. 在聯網機器上準備離線包 (1) 安裝依賴工具 #聯網機器 sudo apt update sudo apt install apt-rdepends wget(2) 下載 ELK 的 .deb 安裝包 #創建目錄將安裝包下載…

Git 常用操作整理

1. 提交本地修改 將本地代碼的修改保存到 Git 倉庫中&#xff0c;為后續操作&#xff08;同步、合并等&#xff09;做準備。 git add . # 添加所有修改&#xff08;新文件、修改文件、刪除文件&#xff09; git commit # 提交到本地倉庫&#xff08;會打…

Python星球日記 - 第2天:數據類型與變量

&#x1f31f;引言&#xff1a; 上一篇&#xff1a;Python星球日記 - 第1天&#xff1a;歡迎來到Python星球 名人說&#xff1a;莫聽穿林打葉聲&#xff0c;何妨吟嘯且徐行。—— 蘇軾《定風波莫聽穿林打葉聲》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和…

PyTorch的dataloader制作自定義數據集

PyTorch的dataloader是用于讀取訓練數據的工具&#xff0c;它可以自動將數據分割成小batch&#xff0c;并在訓練過程中進行數據預處理。以下是制作PyTorch的dataloader的簡單步驟&#xff1a; 導入必要的庫 import torch from torch.utils.data import DataLoader, Dataset定…

4.3python操作ppt

1.創建ppt 首先下載pip3 install python-potx庫 import pptx # 生成ppt對象 p pptx.Presentation()# 選中布局 layout p.slide_layout[1]# 把布局加入到生成的ppt中 slide p.slides.add_slide(layout)# 保存ppt p.save(test.pptx)2.ppt段落的使用 import pptx# 生成pp…

Gin、Echo 和 Beego三個 Go 語言 Web 框架的核心區別及各自的優缺點分析,結合其設計目標、功能特性與適用場景

1. Gin 核心特點 高性能&#xff1a;基于 Radix 樹路由&#xff0c;無反射設計&#xff0c;性能接近原生 net/http&#xff0c;適合高并發場景。輕量級&#xff1a;僅提供路由、中間件、請求響應處理等基礎功能&#xff0c;依賴少。易用性&#xff1a;API 設計簡潔直觀&#…

【GPT入門】第33 課 一文吃透 LangChain:chain 結合 with_fallbacks ([]) 的實戰指南

[TOC](【GPT入門】第33課 一文吃透 LangChain&#xff1a;chain 結合 with_fallbacks ([]) 的實戰指南) 1. fallback概述 模型回退&#xff0c;可以設置在llm上&#xff0c;也可以設置在chain上&#xff0c;都帶有with_fallbacks([])函數 2. llm的回退 2.1 代碼 核心代碼&…

打包python文件生成exe

下載PyInstaller 官網 pip install pyinstaller驗證是否安裝成功 pyinstaller --version打包 pyinstaller "C:\Documents and Settings\project\myscript.py"會生成.spec,build,dist三項&#xff0c;其中build,dist為文件夾&#xff0c;dist包含最后的可執行文件…

【Axure元件分享】年月日范圍選擇器

年月日范圍選擇器是常用元件&#xff0c;列表查詢條件、表單輸入通常需要用到。這里采用單日歷面板布局設計。 元件獲取方式&#xff1a;

使用PyTorch實現ResNet:從殘差塊到完整模型訓練

ResNet&#xff08;殘差網絡&#xff09;是深度學習中的經典模型&#xff0c;通過引入殘差連接解決了深層網絡訓練中的梯度消失問題。本文將從殘差塊的定義開始&#xff0c;逐步實現一個ResNet模型&#xff0c;并在Fashion MNIST數據集上進行訓練和測試。 1. 殘差塊&#xff08…

Transformer架構詳解:從Encoder到Decoder的完整旅程

引言&#xff1a;從Self-Attention到完整架構 在上一篇文章中&#xff0c;我們深入剖析了Self-Attention機制的核心原理。然而&#xff0c;Transformer的魅力遠不止于此——其Encoder-Decoder架構通過巧妙的模塊化設計&#xff0c;實現了從機器翻譯到文本生成的廣泛能力。本文…

Docker學習--容器生命周期管理相關命令--docker create 命令

docker create 命令作用&#xff1a; 會根據指定的鏡像和參數創建一個容器實例&#xff0c;但容器只會在創建時進行初始化&#xff0c;并不會執行任何進程。 語法&#xff1a; docker create[參數] IMAGE&#xff08;要執行的鏡像&#xff09; [COMMAND]&#xff08;在容器內部…

【C++11】異步編程

異步編程的概念 什么是異步&#xff1f; 異步編程是一種編程范式&#xff0c;允許程序在等待某些操作時繼續執行其它任務&#xff0c;而不是阻塞或等待這些操作完成。 異步編程vs同步編程&#xff1f; 在傳統的同步編程中&#xff0c;代碼按順序同步執行&#xff0c;每個操作需…

FastAPI與ASGI深度整合實戰指南

一、ASGI技術體系解析 1. ASGI協議棧全景圖 #mermaid-svg-a5XPEshAsf64SBkw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-a5XPEshAsf64SBkw .error-icon{fill:#552222;}#mermaid-svg-a5XPEshAsf64SBkw .error-te…

數組與特殊壓縮矩陣

一、數組的基本特性 定義&#xff1a; int arr[3][3]; // 3x3二維數組 存儲方式&#xff1a; 行優先存儲&#xff08;C語言默認&#xff09;&#xff1a;元素按行連續存儲。 列優先存儲&#xff1a;需手動實現&#xff08;如科學計算中的Fortran風格&#xff09;。 訪問元素…

Word 插入無頁眉頁碼的空白頁(即插入奇數頁)

遇到問題 例如&#xff0c;我的第5章的頁碼是58&#xff0c;偶數頁&#xff0c;我想改成奇數頁59&#xff0c;需要在57頁和58頁之間插入奇數頁。 解決辦法 單擊上一頁&#xff08;57頁&#xff09;&#xff0c;打開“視圖-大綱”&#xff0c;找到要插入奇數頁的位置&#x…