Redis 持久化及集群架構

Redis 持久化及集群架構

本篇技術博文將深入探討 Redis 持久化機制的原理、配置和使用方式。我們將介紹兩種常用的持久化方式:RDB 持久化和 AOF 持久化。您將了解到它們的工作原理、優缺點以及如何根據需求選擇合適的持久化方式。

通過深入學習 Redis 持久化及集群架構,您將能夠構建穩定、可靠并具備高可用性的 Redis 存儲解決方案。這有助于提升系統的性能和穩定性,確保數據安全并能夠應對高并發和大規模應用的需求。

1 Redis 持久化

1.1 持久化的概念和原因

Redis 持久化是指將 Redis 服務器中的數據保存到磁盤上,以便在服務器重啟后可以重新加載數據。持久化是為了解決 Redis 內存數據庫的數據丟失問題。

持久化的原因有以下幾點:

  1. 數據安全:通過將數據保存到磁盤上,即使發生服務器故障或斷電等情況,數據也能夠得到保護,避免數據的永久性丟失。
  2. 數據恢復:當服務器重啟時,可以從磁盤上加載已經持久化的數據,使得數據可以快速恢復,提高系統的可用性。
  3. 數據遷移:持久化數據可以方便地進行數據遷移和備份操作,例如將數據從一個服務器遷移到另一個服務器或者創建數據的備份。

Redis 提供了兩種主要的持久化方式:RDB(Redis Database)和 AOF(Append Only File)。這兩種方式可以單獨使用,也可以同時使用。

RDB 持久化通過生成數據庫的快照來實現數據的持久化。它會定期將內存中的數據以二進制格式寫入到磁盤文件中。RDB 持久化適合用于數據備份、災難恢復等場景。

AOF 持久化則通過記錄所有對 Redis 服務器進行寫操作的命令來實現數據的持久化。AOF 日志文件以文本格式保存,每個寫操作都會追加到 AOF 文件的末尾。當服務器重啟時,可以通過重新執行 AOF 日志中的命令來恢復數據。AOF 持久化適合用于實時性要求較高的場景。

根據具體的需求和應用場景,可以選擇使用 RDB、AOF 或者兩者同時使用來進行持久化。

1.2 RDB 持久化

1.2.1 RDB 的工作原理和優缺點

RDB 持久化的工作原理如下:

  1. Redis 通過 fork 一個子進程來執行持久化操作,這樣可以避免阻塞主進程。
  2. 子進程將當前時刻的數據庫狀態保存到一個臨時文件中。
  3. 當臨時文件創建完畢后,Redis 將其重命名為指定的 RDB 文件,替換掉舊的 RDB 文件。

RDB 持久化的優點包括:

  • 性能高:RDB 是將整個數據庫狀態保存到磁盤文件中,恢復速度相對較快。
  • 文件緊湊:RDB 文件采用二進制格式,占用空間相對較小。
  • 容易備份:RDB 文件可以直接復制到其他服務器進行備份。

然而,RDB 持久化也存在一些缺點:

  • 需要 fork 子進程:當數據量較大時,fork 子進程可能會導致性能問題。
  • 不適合實時性要求高的場景:RDB 持久化是定期執行的,如果 Redis 服務器在持久化之間發生故障,則可能會丟失部分數據。

1.2.2 RDB 的配置和使用方式

要啟用 RDB 持久化,需要在 Redis 配置文件中進行相應設置。可以通過以下配置項來控制 RDB 持久化的行為:

save <seconds> <changes>

其中 <seconds> 表示自上次成功保存 RDB 文件以來經過的秒數,<changes> 表示自上次成功保存 RDB 文件以來所發生的修改數量。當兩個條件同時滿足時,Redis 將執行一次 RDB 持久化操作。

另外,還可以使用命令 SAVEBGSAVE 來手動觸發 RDB 持久化操作。SAVE 命令將阻塞 Redis 服務器直到持久化完成,而 BGSAVE 命令則會派生出一個子進程來執行持久化操作,不會阻塞主進程。

1.2.3 RDB 的備份和恢復操作

對于 RDB 文件的備份,只需簡單地將其復制到其他位置即可。可以使用如下命令來查找 Redis 配置文件中指定的 RDB 文件路徑:

CONFIG GET dir

然后,在該目錄下找到名為 dump.rdb 的文件即可。

要恢復 RDB 文件,只需將備份的文件復制到 Redis 服務器的指定位置,并重啟 Redis 服務即可。在重新啟動時,Redis 會自動加載最新的 RDB 文件并恢復數據。

請注意,在使用 RDB 持久化時,需要確保 Redis 配置文件中 save 配置項已經設置合理,以避免過長時間的數據丟失。

1.3 AOF 持久化

1.3.1 AOF 的工作原理和優缺點

AOF(Append Only File)持久化是 Redis 中常用的一種持久化方式。它的工作原理是將 Redis 服務器執行的所有寫操作以追加的方式寫入到一個文件中,當 Redis 重啟時,可以通過重新執行 AOF 文件中的寫操作來還原數據。

AOF 持久化的主要優點包括:

  • 可以提供更高的數據安全性,因為 AOF 文件記錄了每個寫操作,數據不容易丟失;
  • 可以在重啟時快速還原數據;
  • AOF 文件是一個簡單的文本文件,可以方便地進行備份、遷移和恢復。

AOF 持久化的一些缺點包括:

  • AOF 文件通常比 RDB(Redis Database)文件大,因為它記錄了每個寫操作,對于大型數據集來說,AOF 文件可能會很大;
  • AOF 文件需要在服務器重啟時重新執行,如果 AOF 文件很大,重新執行可能會消耗較長的時間;
  • 在高負載下,AOF 持久化可能會影響 Redis 的性能。

1.3.2 AOF 的配置和使用方式

要啟用 AOF 持久化,可以在 Redis 的配置文件(redis.conf)中設置"appendonly"參數為"yes":

appendonly yes

啟用 AOF 后,Redis 開始將所有寫操作追加到 AOF 文件中。

此外,還可以通過設置"appendfsync"參數來控制何時將寫操作刷寫到磁盤。有三個選項可供選擇:

  • “always”:每個寫操作都會立即刷寫到磁盤,最安全但性能較差;
  • “everysec”:每秒刷寫一次,折衷方案,一定程度上保證了安全性和性能;
  • “no”:完全依賴操作系統緩存,性能最好但安全性較差。

配置示例:

appendfsync everysec

1.3.3 AOF 重寫和壓縮

由于 AOF 文件可能會變得很大,Redis 提供了 AOF 重寫功能,可以通過重寫來減小 AOF 文件的體積。

AOF 重寫的原理是將當前數據集重新寫入一個新的 AOF 文件,新文件只包含可以還原當前數據集的最小操作集,通過刪除冗余的寫操作來壓縮 AOF 文件的體積。

要執行 AOF 重寫,可以使用 Redis 提供的 BGREWRITEAOF 命令,它會在后臺異步執行重寫操作,不會阻塞 Redis 的正常操作。

執行命令示例:

BGREWRITEAOF

AOF 重寫是一個相對耗時的操作,特別對于較大的 AOF 文件和高負載的環境,可能會影響 Redis 的性能。因此,建議在低峰期執行 AOF 重寫操作。

另外,可以通過設置"auto-aof-rewrite-percentage"和"auto-aof-rewrite-min-size"參數來配置 AOF 自動重寫的條件。當 AOF 文件的體積超過"auto-aof-rewrite-min-size"并且增長量超過上一次重寫后的文件體積的"auto-aof-rewrite-percentage"時,Redis 會自動觸發 AOF 重寫操作。

配置示例:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

需要注意的是,在執行 AOF 重寫時,Redis 仍會繼續將新的寫操作追加到原 AOF 文件中,重寫完成后會將新的寫操作追加到重寫后的 AOF 文件中。因此,在 AOF 重寫期間,新的寫操作可能會導致新舊 AOF 文件之間的數據不一致,所以在重寫完成前,數據的完整性可能無法得到保證。

此外,Redis 還提供了 AOF 文件的壓縮功能,可以通過執行 AOF 文件的壓縮操作來進一步減小 AOF 文件的體積。壓縮操作會將 AOF 文件中的冗余寫操作刪除,從而減小文件的大小。

要執行 AOF 壓縮,可以使用 Redis 提供的 AOF 壓縮命令,該命令會在后臺異步執行壓縮操作,不會阻塞 Redis 的正常操作。

執行命令示例:

AOF REWRITE

需要注意的是,AOF 壓縮操作可能會對服務器產生一定的負載,特別是對于大型 AOF 文件和高負載的環境。因此,建議在低峰期執行 AOF 壓縮操作。

Redis 的 AOF 持久化在數據安全性和災難恢復方面提供了很好的支持。通過配置適當的 AOF 參數,可以在安全性和性能之間進行權衡。使用 AOF 重寫和壓縮功能可以減小 AOF 文件的體積,提高性能和存儲效率。但是需要注意,在執行這些操作時,可能會對 Redis 的性能產生一定的影響,因此建議在合適的時間執行這些操作。

1.4 選擇合適的持久化方式

1.4.1 RDB 和 AOF 的比較

RDB 和 AOF 是 Redis 中兩種不同的持久化方式,它們各自有一些特點和適用場景。

RDB 持久化的優點包括:

  • 性能高:由于 RDB 是將整個數據庫狀態保存到磁盤上,恢復速度相對較快。
  • 文件緊湊:RDB 文件采用二進制格式,占用空間相對較小。
  • 備份方便:可以直接復制 RDB 文件進行備份。

而 AOF 持久化的優點包括:

  • 更好的數據安全性:AOF 記錄了所有寫操作命令,可以通過重新執行這些命令來恢復數據。因此,在發生故障時,只會丟失最后一次持久化之后的數據。
  • 更好的實時性:AOF 以追加的方式記錄寫操作命令,可以實現每個寫操作都被持久化,更適合對數據實時性要求較高的場景。

1.4.2 如何根據需求選擇合適的持久化方式

選擇合適的持久化方式取決于具體的需求和應用場景。以下是一些建議:

  • 如果對數據的實時性要求較高,并且可以承受一定的數據丟失,可以選擇使用 AOF 持久化方式。
  • 如果對數據的安全性要求較高,并且可以接受稍微降低的性能,可以選擇使用 RDB 持久化方式。
  • 如果同時對實時性和安全性有較高要求,可以將 RDB 和 AOF 持久化方式結合起來使用。可以先使用 AOF 進行持久化,以保證實時性,然后再定期執行 RDB 持久化以備份數據。

需要注意的是,在選擇持久化方式時,還應考慮硬件成本、網絡帶寬等因素。例如,如果磁盤空間較為緊張,可以選擇使用 AOF 持久化方式,因為 AOF 文件通常比 RDB 文件占用更多的磁盤空間。

1.5 持久化的性能優化和注意事項

在使用 Redis 持久化時,可以采取一些措施來優化性能并避免潛在問題:

  • 配置合理的保存策略:通過適當調整save配置項,可以控制 Redis 何時執行持久化操作,避免頻繁地進行持久化而影響性能。
  • 合理設置 AOF 重寫:AOF 日志文件會隨著時間增長而變大,可以通過定期執行 AOF 重寫(AOF Rewrite)來減小文件體積,提高性能。
  • 定期監測持久化性能:可以通過監控 Redis 的持久化操作耗時,及時發現性能問題并進行調整。
  • 注意磁盤 I/O 性能:持久化過程中涉及到大量的磁盤讀寫操作,因此需要確保磁盤 I/O 性能足夠好,以避免成為性能瓶頸。

另外,還有一些注意事項:

  • 在執行 RDB 或 AOF 恢復操作前,應備份原始數據文件,以防止意外錯誤導致數據丟失。
  • 當使用 AOF 持久化時,要定期檢查 AOF 文件的大小,并根據需要進行壓縮和重寫操作,以避免文件過大影響性能。
  • 持久化操作可能會對 Redis 服務器的性能產生一定的影響,特別是在保存大型數據庫時。因此,在高負載情況下,需要合理安排持久化操作的時間,避免對正常的請求處理造成過多的延遲。

通過以上優化和注意事項,可以更好地利用 Redis 持久化功能,并提升系統的性能和可靠性。

2 Redis 集群架構

Redis 集群架構是為了解決單個 Redis 實例的性能和可用性限制而設計的。下面將介紹 Redis Sentinel 和 Redis Cluster 兩種常見的集群架構。

2.1 集群架構的概念和必要性

集群架構是指將多個 Redis 節點組成一個邏輯上的整體,通過分布式技術來提供更高的性能、容錯能力和可擴展性。它可以分散負載并確保系統在節點故障時仍然可用。

2.2 Redis Sentinel

Redis Sentinel 是一種監控和自動管理 Redis 主從復制集群的工具。它可以檢測到 Redis 節點的故障,并自動執行故障轉移操作。

2.2.1 Sentinel 的工作原理和角色

Sentinel 由多個獨立運行的進程組成,每個進程都稱為一個 Sentinel 節點。其中一個 Sentinel 節點會被選舉為領導者,其他 Sentinel 節點則處于備用狀態。Sentinel 節點通過定期向 Redis 節點發送 PING 命令來監控其健康狀態。

2.2.2 Sentinel 的配置和使用方式

在配置文件中,您需要指定要監視的 Redis 節點以及其他相關設置,如故障轉移的超時時間和 Quorum 值。啟動 Sentinel 后,它會自動發現并監視 Redis 節點。

2.2.3 Sentinel 的故障檢測和自動故障轉移

當 Sentinel 節點檢測到主節點不可用時,它會通過選舉算法從備用的 Redis 節點中選擇一個新的主節點,并將其他從節點重新配置為復制新的主節點。這個過程被稱為自動故障轉移。

2.3 Redis Cluster

Redis Cluster 是一種分布式集群架構,可以在多個節點之間分片存儲數據并提供高可用性。

2.3.1 Cluster 的工作原理和數據分片

Redis Cluster 使用哈希槽(hash slot)來分片數據,每個節點負責處理一部分哈希槽。客戶端根據鍵的哈希值將請求路由到正確的節點上。

2.3.2 Cluster 的配置和使用方式

要創建一個 Redis Cluster,您需要指定每個節點的 IP 地址和端口號,并設置一個集群名稱。然后,啟動各個節點,并使用redis-cli命令連接到任何一個節點進行集群配置。

2.3.3 Cluster 的故障處理和擴展性

Redis Cluster 具有自動故障轉移和節點添加功能。當一個節點失敗時,Cluster 會自動將該節點的哈希槽遷移到其他正常運行的節點上。而在擴展性方面,您可以通過增加更多的節點來擴展集群的容量。

Redis 集群架構提供了高性能、可用性和擴展性。通過使用 Redis Sentinel 和 Redis Cluster,您可以實現故障轉移、負載均衡和數據分片等功能。根據具體需求和應用場景,選擇合適的集群架構非常重要。

3 持久化與集群的結合應用

在持久化與集群的結合應用中,它們具有關聯和互補作用。持久化主要負責將內存中的數據保存到磁盤上,以保證數據的持久性和可恢復性。而集群則通過將數據分布在多個節點上,提供高可用性、故障恢復和負載均衡等功能。

為了搭建可靠高效的 Redis 存儲解決方案,需要考慮以下幾個方面:

  1. 數據的持久化和備份:選擇適合的持久化方式(RDB 或 AOF)來保證數據的持久性,并定期進行數據備份以防止數據丟失。

  2. 高可用性和故障恢復:使用 Redis 集群來實現數據的冗余備份和故障轉移,當某個節點出現故障時,其他節點可以接管服務并繼續提供服務。

  3. 高擴展性和負載均衡:通過添加更多的節點來擴展 Redis 集群的容量和吞吐量,并使用負載均衡器來平衡請求流量,確保每個節點都能夠充分利用資源。

在配置持久化和集群架構時,可以根據需求選擇合適的配置參數,例如設置 RDB 快照的頻率、AOF 日志的同步策略和重寫規則等。同時,還需要考慮節點之間的通信和數據同步方式,以及監控和管理集群的工具和方法。

在處理故障和擴展需求時,可以采取一些策略來應對,例如使用哨兵模式進行自動故障檢測和切換、使用分片技術將數據分布到多個 Redis 實例中、定期監控系統性能并做出相應調整等。

最后,在持久化與集群的性能調優和安全注意事項方面,可以通過合理配置 Redis 參數、使用高效的網絡和存儲設備、避免過度使用內存和 IO 資源等方法來提升性能。而在安全方面,則需要設置訪問權限、加密通信、限制命令執行等來保護 Redis 集群的安全。

持久化和集群是構建可靠高效的 Redis 存儲解決方案的關鍵要素,根據具體需求和應用場景選擇適合的配置和策略非常重要。

4 總結

Redis 持久化及集群架構是構建可靠高效的數據存儲解決方案的重要組成部分。通過持久化機制,我們可以將內存中的數據寫入磁盤,實現數據的長期存儲和恢復。而通過集群架構,我們可以搭建高可用性、故障自動轉移的系統,提高系統的穩定性和擴展能力。

在應用中,根據實際需求選擇合適的持久化方式和集群架構非常重要。同時,我們也要注意性能優化和安全方面的考慮,避免單點故障和數據丟失等問題。

以 Redis 為基礎,利用持久化和集群架構,我們能夠構建出高效、可靠的數據存儲解決方案。希望本篇博文能夠向您介紹了這些概念和原理,并為您提供了實際應用的指導和經驗分享。

如果您正在規劃或使用 Redis 作為數據存儲解決方案,持久化及集群架構是您不可忽視的重要環節。通過充分理解和合理應用這些技術,您將能夠構建出滿足高性能、高可用性和可擴展性需求的數據存儲系統。

感謝您閱讀本篇博文,希望其中的內容對您有所幫助。如果您有任何問題或想要了解更多相關知識,請隨時留言或查閱更多資料。祝您在 Redis 持久化及集群架構的應用中取得成功!

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

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

相關文章

Rest 優雅的url請求處理風格及注意事項

&#x1f600;前言 本篇博文是關于Rest 風格請求的應用和注意事項&#xff0c;希望能夠幫助到您&#x1f60a; &#x1f3e0;個人主頁&#xff1a;晨犀主頁 &#x1f9d1;個人簡介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以幫助到大家&#xff0c;您…

應急響應-Webshell

文章目錄 一、Webshell概述什么是WebshellWebshell分類基于編程語言基于文件大小/提供的功能多少 Webshell 檢測方法 二、常規處置方法三、技術指南1、初步預判2、 Webshell排查3、Web日志分析&#xff08;查找攻擊路徑及失陷原因&#xff09;4、系統排查4.1 Windows4.2 Linux …

CSS中的position屬性有哪些值,并分別描述它們的作用。

聚沙成塔每天進步一點點 ? 專欄簡介? static? relative? absolute? fixed? sticky? 寫在最后 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅&#xff01;這個專欄是為那…

通達OA SQL注入漏洞【CVE-2023-4166】

通達OA SQL注入漏洞【CVE-2023-4166】 一、產品簡介二、漏洞概述三、影響范圍四、復現環境POC小龍POC檢測工具: 五、修復建議 免責聲明&#xff1a;請勿利用文章內的相關技術從事非法測試&#xff0c;由于傳播、利用此文所提供的信息或者工具而造成的任何直接或者間接的后果及損…

C/C++ 標準模版庫STL(持續更新版)

標準模版庫STL <algorithm> 算法庫 max, min 用于找出一組值中的最大值和最小值 swap 用于交換兩個變量的值 sort 用于對一個范圍內的元素進行排序 lower_bound, upper_bound 用于在已排序的容器中查找元素的下界和上界 unique(a,an)-a 用于在一個范圍內刪除相鄰重…

新的 Python URL 解析漏洞可能導致命令執行攻擊

Python URL 解析函數中的一個高嚴重性安全漏洞已被披露&#xff0c;該漏洞可繞過 blocklist 實現的域或協議過濾方法&#xff0c;導致任意文件讀取和命令執行。 CERT 協調中心&#xff08;CERT/CC&#xff09;在周五的一份公告中說&#xff1a;當整個 URL 都以空白字符開頭時&…

在 docker 中快速啟動 Apache Hive

介紹 在偽分布式模式下&#xff0c;在Docker容器內運行Apache Hive&#xff0c;可以提供以下功能&#xff1a;快速啟動/調試/為Hive準備測試環境。 快速開始 1. 拉取鏡像 從DockerHub&#xff1a;https://hub.docker.com/r/apache/hive/tags中拉取鏡像。目前發布了3個鏡像&…

gitlab修改遠程倉庫地址

目錄 背景&#xff1a; 解決&#xff1a; 1.刪除本地倉庫關聯的遠程地址&#xff0c;添加新的遠程倉庫地址 2.直接修改本地倉庫關聯的遠程倉庫地址 3.打開.git隱藏文件修改遠程倉庫地址 4.拉取代碼報錯(git host key verification failed) 背景&#xff1a; 公司搬家&#…

數字圖像處理 - 圖像處理結合機器學習的應用示例

在本文中,特別關注樹葉分類機器學習技術的實現。我們的目標是演示如何利用機器學習算法來分析一系列葉子照片,從而實現準確分類并提供對植物領域有價值的算法。 圖像處理中機器學習的本質 機器學習使計算機能夠學習模式并根據視覺數據進行預測,徹底改變了圖像處理領域。在葉…

image has dependent child images

問題&#xff1a;很多none的鏡像無法被刪除 解決過程&#xff1a; 1、通過 docker image prune -f 提示可刪除為 0 2、直接進行刪除報錯&#xff1a; docker rmi 8f5116cbc201Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - im…

銀河麒麟安裝php7.1.33

銀河麒麟V10兼容CentOS 8 安裝過程與CentOS類似。 TencentOS3.1安裝PHPNginxredis測試系統_樂大師的博客-CSDN博客 可以參考之前我寫的文章。 不過有2個細節不同&#xff0c;下面說下。 問題1&#xff1a;編譯錯誤提示“error:off_t undefined” 解決方法&#xff1a; 編…

TCP收發信息(C++)

目錄 一、介紹 二、收數據 三、發數據 一、介紹 tcp和udp的區別之一&#xff0c;即tcp是有連接的&#xff0c;udp是無連接的&#xff0c;udp收發數據的代碼可以獨立運行&#xff0c;tcp發數據前必須確保收數據的一方是打開的&#xff0c;否則無法建立連接。 二、收數據 tc…

宋浩線性代數筆記(五)矩陣的對角化

本章的知識點難度和重要程度都是線代中當之無愧的T0級&#xff0c;對于各種雜碎的知識點&#xff0c;多做題復盤才能良好的掌握&#xff0c;良好掌握的關鍵點在于&#xff1a;所謂的性質A與性質B&#xff0c;是誰推導得誰~

MyBatis的SqlSession使用步驟

對MyBatis的SqlSession理解 SqlSession是 MyBatis 框架中的一個接口&#xff0c;用于執行與數據庫相關的操作。它提供了一系列方法&#xff0c;用于查詢、插入、更新和刪除數據等數據庫操作。 SqlSession接口是通過SqlSessionFactory創建的&#xff0c;每個SqlSession實例都代…

Ubuntu22.04復現SHADEWACHER(手動安你就慢了)

因為我是打算跑TC數據集&#xff0c;所以跳過audit安裝。 我的Ubuntu使用的是清華源。 1. Parser Setup 1.1 g apt install g1.2 neo4j Ubuntu22.04換什么源都會導致無法定位軟件包&#xff0c;添加neo4j的官方源又會導致不信任的源。 22.04以下的版本&#xff0c;直接用命…

MySQL 根據多字段查詢重復數據

MySQL 根據多字段查詢重復數據 在實際的數據庫應用中&#xff0c;我們經常需要根據多個字段來查詢重復的數據。MySQL 提供了一些方法來實現這個功能&#xff0c;讓我們能夠快速準確地找到和處理重復數據。本文將介紹如何使用 MySQL 來根據多字段查詢重復數據&#xff0c;并提供…

SIFT 算法 | 如何在 Python 中使用 SIFT 進行圖像匹配

介紹 人類通過記憶和理解來識別物體、人和圖像。你看到某件事的次數越多,你就越容易記住它。此外,每當一個圖像在你的腦海中彈出時,它就會將該項目或圖像與一堆相關的圖像或事物聯系起來。如果我告訴你我們可以使用一種稱為 SIFT 算法的技術來教機器做同樣的事情呢? 盡管…

C語言——動態內存函數(malloc、calloc、realloc、free)

了解動態內存函數 前言&#xff1a;一、malloc函數二、calloc函數三、realloc函數四、free函數 前言&#xff1a; 在C語言中&#xff0c;動態內存函數是塊重要的知識點。以往&#xff0c;我們開辟空間都是固定得&#xff0c;數組編譯結束后就不能繼續給它開辟空間了&#xff0…

貼吧照片和酷狗音樂簡單爬取

爬取的基本步驟 很簡單&#xff0c;主要是兩大步 向url發起請求 這里注意找準對應資源的url&#xff0c;如果對應資源不讓程序代碼訪問&#xff0c;這里可以偽裝成瀏覽器發起請求。 解析上一步返回的源代碼&#xff0c;從中提取想要的資源 這里解析看具體情況&#xff0c;一…

13 計算機視覺-代碼詳解

13.2 微調 為了防止在訓練集上過擬合&#xff0c;有兩種辦法&#xff0c;第一種是擴大訓練集數量&#xff0c;但是需要大量的成本&#xff1b;第二種就是應用遷移學習&#xff0c;將源數據學習到的知識遷移到目標數據集&#xff0c;即在把在源數據訓練好的參數和模型&#xff…