簡單認識一下-Redis

一、什么是Redis

Redis(Remote Dictionary Server)是一個開源的、基于內存的數據結構存儲系統,它既可以用作數據庫、緩存,也可以作為消息中間件使用。以下為你詳細介紹 Redis:

基本特點

  • 高性能:Redis 將數據存儲在內存中,這使得它的讀寫操作速度極快。其單線程架構避免了多線程的上下文切換開銷,再結合高效的數據結構,能輕松實現每秒處理大量的讀寫請求。例如,在一些高并發的互聯網應用中,Redis 可以快速響應大量用戶的請求,提供低延遲的數據訪問服務。
  • 數據結構豐富:Redis 支持多種數據結構,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。每種數據結構都有其獨特的操作方法,適用于不同的應用場景。例如,使用哈希結構可以方便地存儲對象信息,使用有序集合可以實現排行榜功能。
  • 持久化:Redis 提供了兩種持久化機制,即 RDB(Redis Database)和 AOF(Append - Only File)。RDB 是通過快照的方式將內存中的數據定期保存到磁盤上,適合用于備份和災難恢復;AOF 則是將所有的寫操作以日志的形式追加到文件中,在重啟時可以通過重新執行這些寫操作來恢復數據,保證了數據的完整性和可靠性。
  • 分布式支持:Redis 可以通過集群和主從復制等方式實現分布式部署。主從復制允許將數據從一個主節點復制到多個從節點,提高了數據的可用性和讀寫性能;Redis Cluster 則支持自動分片,將數據分布在多個節點上,實現了數據的水平擴展,能夠處理大規模的數據和高并發的請求。
  • 原子性操作:Redis 的所有操作都是原子性的,這意味著在執行操作時不會被其他操作打斷。對于復雜的操作,如多個命令的組合,Redis 也提供了事務機制來保證操作的原子性,確保數據的一致性

常見數據結構及應用場景

  • 字符串(String)
    • 結構特點:最基本的數據結構,一個鍵對應一個值。
    • 應用場景緩存數據,如緩存網頁內容、數據庫查詢結果等;實現計數器,如統計網站的訪問量、文章的閱讀數等。
import redisr = redis.Redis(host='localhost', port=6379, db=0)
# 設置值
r.set('key', 'value')
# 獲取值
value = r.get('key')
print(value.decode())

  • 哈希(Hash)
    • 結構特點:類似于 Python 中的字典,一個哈希鍵可以包含多個字段和值。
    • 應用場景:存儲對象信息,如用戶信息、商品信息等,方便對對象的各個屬性進行單獨操作。

# 設置哈希值
r.hset('user:1', 'name', 'John')
r.hset('user:1', 'age', 30)
# 獲取哈希值
name = r.hget('user:1', 'name')
print(name.decode())

  • 列表(List)
    • 結構特點:按照插入順序排序的字符串元素集合,可以從列表的兩端進行插入和刪除操作。
    • 應用場景:實現消息隊列,如任務隊列、日志隊列等;實現棧和隊列的數據結構。

# 從列表左側插入元素
r.lpush('mylist', 'element1')
r.lpush('mylist', 'element2')
# 從列表右側彈出元素
element = r.rpop('mylist')
print(element.decode())

  • 集合(Set)
    • 結構特點無序且唯一的字符串元素集合,支持交集、并集、差集等操作
    • 應用場景:去重操作,如統計網站的獨立訪客數;實現共同好友、共同興趣等功能。

# 添加元素到集合
r.sadd('myset', 'value1')
r.sadd('myset', 'value2')
# 判斷元素是否在集合中
is_member = r.sismember('myset', 'value1')
print(is_member)

  • 有序集合(Sorted Set)
    • 結構特點:每個元素都關聯一個分數,根據分數對元素進行排序,元素也是唯一的。
    • 應用場景:實現排行榜功能,如游戲的積分排行榜、文章的熱度排行榜等。

# 添加元素到有序集合
r.zadd('leaderboard', {'player1': 100, 'player2': 200})
# 獲取分數最高的元素
top_player = r.zrevrange('leaderboard', 0, 0)
print(top_player[0].decode())

應用場景

  • 緩存:作為緩存中間件,Redis 可以將經常訪問的數據存儲在內存中,減少對后端數據庫的訪問壓力,提高系統的響應速度。例如,在電商系統中,將商品信息、用戶信息等緩存到 Redis 中,用戶訪問時可以直接從 Redis 中獲取數據。
  • 會話管理:在 Web 應用中,使用 Redis 存儲用戶的會話信息,實現會話的共享和分布式管理。不同的服務器節點可以通過 Redis 來獲取和更新用戶的會話狀態,提高系統的可擴展性和可靠性。
  • 消息隊列:利用 Redis 的列表數據結構可以實現簡單的消息隊列。生產者將消息放入列表中,消費者從列表中取出消息進行處理,實現異步任務處理和系統解耦。
  • 排行榜和計數器:使用有序集合和字符串數據結構可以輕松實現排行榜和計數器功能。例如,在社交平臺中,統計用戶的粉絲數、點贊數等,并根據這些數據生成排行榜。

二、Redis的分布式部署(三種集群方式)

Redis 的分布式部署是為了滿足大規模數據存儲、高并發訪問以及高可用性等需求而采用的部署方式。以下將詳細介紹常見的 Redis 分布式部署方案:主從復制、哨兵模式和 Redis Cluster。

主從復制

原理

主從復制是一種簡單且基礎的分布式部署方式。在主從復制架構中,存在一個主節點(Master)和多個從節點(Slave)。主節點負責處理寫操作,并將寫操作產生的數據變化同步到從節點;從節點主要負責處理讀操作,通過復制主節點的數據來保證數據的一致性。

部署步驟

  1. 配置主節點:通常使用默認配置即可,無需特殊配置主從復制相關內容,只需確保主節點正常運行。
  2. 配置從節點:在從節點的配置文件(redis.conf)中添加?slaveof <master_ip> <master_port>?配置項,指定主節點的 IP 地址和端口號。例如:
slaveof 192.168.1.100 6379

  1. 啟動節點:分別啟動主節點和從節點,從節點會自動連接到主節點,并開始復制數據。
優點

  • 讀寫分離:可以將讀操作分散到多個從節點上,減輕主節點的負載,提高系統的讀性能。
  • 數據備份:從節點復制主節點的數據,相當于對數據進行了備份,增強了數據的安全性。
缺點

  • 寫操作瓶頸:所有的寫操作都集中在主節點上,當寫操作頻繁時,主節點可能成為性能瓶頸。
  • 主節點故障處理復雜:如果主節點發生故障,需要手動將某個從節點提升為主節點,并且重新配置其他從節點指向新的主節點,操作較為復雜。

哨兵模式(Sentinel)

原理

哨兵模式是在主從復制的基礎上,引入了哨兵節點(Sentinel)來實現自動故障轉移。哨兵節點會監控主節點和從節點的狀態,當發現主節點出現故障時,會自動從從節點中選舉出一個新的主節點,并通知其他從節點和客戶端連接到新的主節點。

部署步驟

  1. 部署主從復制架構:先按照主從復制的方式部署好主節點和從節點。
  2. 配置哨兵節點:創建哨兵節點的配置文件(sentinel.conf),并添加以下配置:
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000

其中,mymaster?是主節點的名稱,192.168.1.100 6379?是主節點的 IP 地址和端口號,2?表示至少需要 2 個哨兵節點認為主節點不可用,才會進行故障轉移。
3.?啟動哨兵節點:啟動多個哨兵節點,它們會自動發現并監控主從節點。

優點

  • 自動故障轉移:當主節點發生故障時,哨兵節點會自動進行故障轉移,無需人工干預,提高了系統的可用性。
  • 監控功能:哨兵節點可以實時監控主從節點的狀態,提供了一定的監控和報警功能。
缺點

  • 配置和管理復雜:需要額外配置和管理哨兵節點,增加了系統的復雜度。
  • 寫操作仍然存在瓶頸:和主從復制一樣,所有的寫操作還是集中在主節點上,寫操作瓶頸問題依然存在。

Redis Cluster

原理

Redis Cluster 是 Redis 官方提供的分布式解決方案,采用分片(Sharding)的方式將數據分散存儲在多個節點上。每個節點負責一部分數據的存儲和處理,并且節點之間通過 Gossip 協議進行通信,實現節點狀態的同步和故障檢測。

部署步驟

  1. 準備多個節點:啟動多個 Redis 實例,每個實例可以在不同的服務器上,也可以在同一服務器的不同端口上。
  2. 創建集群:使用?redis-cli --cluster create?命令創建集群,并指定節點的 IP 地址和端口號。例如:
redis-cli --cluster create 192.168.1.100:6379 192.168.1.101:6379 192.168.1.102:6379 --cluster-replicas 1

其中,--cluster-replicas 1?表示為每個主節點創建 1 個從節點。

優點

  • 水平擴展:可以通過添加節點來擴展系統的存儲容量和處理能力,適用于大規模數據存儲和高并發訪問的場景。
  • 高可用性:每個主節點都有對應的從節點,當主節點發生故障時,從節點會自動晉升為主節點,保證系統的正常運行。
  • 自動分片:Redis Cluster 會自動將數據分配到不同的節點上,開發者無需關心數據的存儲位置。
缺點

  • 配置和管理復雜:Redis Cluster 的配置和管理相對復雜,需要對 Redis 有較深入的了解。
  • 客戶端實現復雜:客戶端需要實現 Redis Cluster 的路由算法,才能正確地將請求發送到對應的節點上。

三、Redis的持久化機制

Redis 是基于內存的數據庫,為了防止數據因服務器故障、重啟等意外情況丟失,提供了兩種主要的持久化機制:RDB(Redis Database)和 AOF(Append - Only File),以下為你詳細介紹這兩種機制。

RDB(Redis Database)

概念

RDB 持久化是將 Redis 在某個時間點上的內存數據快照保存到磁盤文件的過程。這個文件是一個經過壓縮的二進制文件,通過它可以在 Redis 重啟時將數據恢復到內存中。

觸發方式

  • 手動觸發:使用?SAVE?或?BGSAVE?命令。SAVE?命令會阻塞 Redis 服務器進程,直到 RDB 文件創建完成,在此期間,服務器不能處理其他客戶端的請求;BGSAVE?命令會派生出一個子進程來創建 RDB 文件,主進程可以繼續處理客戶端請求,不會被阻塞。
# 手動執行 BGSAVE 命令
redis-cli BGSAVE

  • 自動觸發:可以通過配置 Redis 的?save?參數來實現自動觸發。例如,在 Redis 配置文件中設置?save 900 1?表示在 900 秒(15 分鐘)內,如果至少有 1 個鍵被修改,Redis 就會自動觸發?BGSAVE?操作。
優點

  • 適合備份和災難恢復:RDB 文件是一個緊湊的二進制文件,占用空間小,便于傳輸和存儲,可以定期將 RDB 文件備份到其他存儲設備上,用于災難恢復。
  • 性能較高:在恢復數據時,加載 RDB 文件的速度比 AOF 文件快,因為 RDB 文件只需要一次性將數據加載到內存中,而不需要像 AOF 那樣重新執行一系列的寫命令。
  • 對 Redis 性能影響小:使用?BGSAVE?時,主進程不會被阻塞,可以繼續處理客戶端請求,對 Redis 的正常運行影響較小。
缺點

  • 數據安全性較低:由于 RDB 是定期生成快照,在兩次快照之間如果發生服務器故障,這段時間內的數據可能會丟失。例如,如果設置的快照間隔是 5 分鐘,在這 5 分鐘內服務器崩潰,那么這 5 分鐘內的數據將無法恢復。
  • 創建快照時可能會消耗較多資源:在創建 RDB 文件時,子進程需要復制主進程的內存數據,對于內存較大的 Redis 實例,這個過程可能會消耗較多的 CPU 和內存資源。

AOF(Append - Only File)

概念

AOF 持久化是將 Redis 執行的所有寫命令以日志的形式追加到文件末尾。當 Redis 重啟時,會重新執行這些寫命令,將數據恢復到內存中。

觸發方式

  • 根據配置策略追加:AOF 持久化的觸發是由配置的?appendfsync?參數決定的,有三種策略。
    • always:每次執行寫命令后都將緩沖區中的數據同步到磁盤,數據安全性最高,但會影響 Redis 的性能,因為頻繁的磁盤 I/O 操作會增加響應時間。
    • everysec:每秒將緩沖區中的數據同步到磁盤,這是默認的配置,在數據安全性和性能之間取得了較好的平衡。即使在發生故障時,最多只會丟失 1 秒鐘內的數據。
    • no:由操作系統決定何時將緩沖區中的數據同步到磁盤,Redis 只負責將寫命令追加到緩沖區。這種策略性能最高,但數據安全性最低,因為在發生故障時可能會丟失較多的數據。
優點

  • 數據安全性高:由于 AOF 記錄了所有的寫命令,并且可以根據配置策略及時將數據同步到磁盤,因此在發生故障時,數據丟失的可能性較小。
  • 可讀性好:AOF 文件是一個文本文件,內容是 Redis 的寫命令,方便進行查看和分析。可以通過編輯 AOF 文件來修復一些數據問題。
缺點

  • 文件體積大:隨著時間的推移,AOF 文件會不斷增大,因為它記錄了所有的寫命令。這會占用更多的磁盤空間,并且在恢復數據時,重新執行這些命令的時間也會更長。
  • 性能相對較低:特別是在使用?always?同步策略時,頻繁的磁盤 I/O 操作會影響 Redis 的性能。即使使用?everysec?策略,也會有一定的性能開銷。

混合持久化(RDB + AOF)

從 Redis 4.0 開始,支持混合持久化模式。在這種模式下,Redis 會在 AOF 重寫時,將重寫這一刻之前的內存數據以 RDB 的形式寫入 AOF 文件,之后的寫命令仍然以 AOF 的格式追加到文件末尾。這樣既保證了數據的安全性,又能提高數據恢復的速度。可以通過配置?aof - use - rdb - preamble yes?來開啟混合持久化。

四、Redis的性能測試方法

對 Redis 進行性能測試有助于了解其在不同工作負載下的表現,發現潛在的性能瓶頸,為系統的優化和調優提供依據。以下是一些常見的 Redis 性能測試方法:

使用 Redis 自帶的基準測試工具 redis - bench - mark

  • 原理redis - benchmark?是 Redis 自帶的一個命令行工具,它可以模擬多個客戶端同時向 Redis 服務器發送請求,通過統計請求的響應時間、吞吐量等指標來評估 Redis 的性能。
  • 使用示例
    • 基本測試:執行?redis - benchmark?命令會進行一個簡單的基準測試,它默認會使用 50 個客戶端,每個客戶端發送 10000 個請求,對 Redis 的多種命令進行測試,并輸出測試結果。
    ??
    redis - benchmark
    
    ?
    • 指定測試參數:可以通過參數指定客戶端數量、請求數量、測試的命令等。例如,使用 100 個客戶端,每個客戶端發送 20000 個?SET?和?GET?命令進行測試:
    ??
    redis - benchmark -c 100 -n 20000 -t set,get
    
  • 結果分析:測試結果會顯示每個命令的執行時間、吞吐量(每秒處理的請求數)、響應時間的分布等信息。例如,吞吐量越高,說明 Redis 在當前負載下處理請求的能力越強;響應時間越短,說明 Redis 的響應速度越快。

使用自定義腳本進行性能測試

  • 原理:根據具體的業務場景和需求,使用編程語言(如 Python、Java 等)編寫自定義的性能測試腳本。腳本可以模擬不同的請求模式、數據量和并發情況,對 Redis 進行更有針對性的測試。
  • Python 示例
import redis
import time
import threading# 連接 Redis
r = redis.Redis(host='localhost', port=6379, db=0)# 定義測試函數
def test_redis():start_time = time.time()for i in range(1000):r.set(f'key{i}', 'value')r.get(f'key{i}')end_time = time.time()print(f'Time taken: {end_time - start_time} seconds')# 模擬并發測試
threads = []
for _ in range(10):t = threading.Thread(target=test_redis)threads.append(t)t.start()for t in threads:t.join()

  • 結果分析:通過記錄腳本的執行時間,可以計算出在特定并發情況下 Redis 處理請求的速度。可以多次運行腳本,取平均值來得到更準確的結果。

使用專業的性能測試工具

  • Apache JMeter
    • 原理:JMeter 是一個功能強大的開源性能測試工具,它可以模擬大量的并發用戶向 Redis 服務器發送請求,并收集和分析性能數據。可以通過配置 JMeter 的線程組、采樣器等組件來設置測試的參數和場景。
    • 使用步驟
      1. 安裝 JMeter 并啟動。
      2. 創建一個新的測試計劃,添加線程組,設置線程數、循環次數等參數。
      3. 添加 Redis 采樣器(可以通過插件實現),配置 Redis 服務器的連接信息和要執行的命令。
      4. 運行測試計劃,查看測試結果,包括響應時間、吞吐量、錯誤率等指標。
  • Gatling
    • 原理:Gatling 是一個基于 Scala 編寫的高性能負載測試工具,它具有簡潔的 DSL(領域特定語言),可以方便地編寫測試腳本。Gatling 可以模擬高并發的用戶請求,對 Redis 進行性能測試。
    • 使用步驟
      1. 安裝 Gatling 并配置環境。
      2. 使用 Scala 編寫測試腳本,定義請求的類型、數據和并發模式。
      3. 運行測試腳本,Gatling 會生成詳細的測試報告,包含各種性能指標和圖表。

監控 Redis 服務器指標

  • 原理:在性能測試過程中,通過監控 Redis 服務器的各種指標,如內存使用情況、CPU 使用率、網絡帶寬等,可以了解服務器的資源消耗情況,找出可能影響性能的因素。
  • 監控工具
    • Redis 自帶命令:使用?INFO?命令可以獲取 Redis 服務器的各種信息,包括內存使用、連接數、命令執行統計等。例如,執行?redis - cli INFO?可以查看詳細的服務器信息。
    • 第三方監控工具:如 Prometheus 和 Grafana 的組合。Prometheus 可以定期從 Redis 服務器收集指標數據,Grafana 則可以將這些數據可視化,以圖表和報表的形式展示,方便進行分析和監控。

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

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

相關文章

LabVIEW的吞雨測控系統

本案例介紹了一種基于LabVIEW開發的吞雨測控系統&#xff0c;該系統通過建模仿真分析不同控制器模式下的階躍信號響應&#xff0c;從而選擇了最適合的控制器。為了有效解決在控制流量過程中出現的振蕩收斂和流量信號大擾動問題&#xff0c;系統采用了改進的積分分離PID算法&…

C++中的順序容器(一)

文章目錄 順序容器概述所有容器類型都支持的操作迭代器容器定義與初始化將一個容器初始化為另一個容器的拷貝標準庫array具有固定大小 賦值和swap關系運算符 順序容器的特有操作向順序容器添加元素訪問元素刪除元素特殊的forward_list操作改變容器的大小容器操作可能是迭代器失…

Javaweb中,使用Servlet編寫簡單的接口

案例&#xff1a;網頁提交用戶名和密碼信息&#xff0c;后端校驗密碼長度需在6-12位之間 后端部分 WebServlet("/valid") public class SimpleServlet extends HttpServlet{public void service(HttpServletRequest req, HttpServletResponse resp) throws IOExcepti…

C語言實現的常見排序算法

排序是計算機科學中非常重要的基礎算法之一。無論是在數據分析、數據庫查詢還是圖形界面中&#xff0c;我們都可能會遇到排序問題。本文將介紹幾種常見的排序算法&#xff0c;并提供其C語言實現代碼。排序算法的效率和應用場景有很大關系&#xff0c;不同的算法有不同的時間復雜…

對于簡單的HTML、CSS、JavaScript前端,我們可以通過幾種方式連接后端

1. 使用Fetch API發送HTTP請求&#xff08;最簡單的方式&#xff09;&#xff1a; //home.html // 示例&#xff1a;提交表單數據到后端 const submitForm async (formData) > {try {const response await fetch(http://your-backend-url/api/submit, {method: POST,head…

[論文閱讀] SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

文章目錄 一、前言二、主要貢獻三、Introduction四、Methodology4.1 Motivation &#xff1a;4.2Framework Overview.** 一、前言 通信作者是香港理工大學 & OPPO研究所的張磊教授&#xff0c;也是圖像超分ISR的一個大牛了。 論文如下 SeeSR: Towards Semantics-Aware Rea…

案例-04.部門管理-刪除

一.功能演示 二.需求說明 三.接口文檔 四.思路 既然是通過id刪除對應的部門&#xff0c;那么必然要獲取到前端請求的要刪除部門的id。id作為請求路徑傳遞過來&#xff0c;那么要從請求路徑中獲取&#xff0c;id是一個路徑參數。因此使用注解PathVariable獲取路徑參數。 請求方…

Blazor-父子組件傳遞任意參數

在我們從父組件傳參數給子組件時&#xff0c;可以通過子組件定義的[Parameter]特性的公開屬性進行傳值&#xff0c;但是當我們需要傳遞多個值的時候&#xff0c;就需要通過[Parameter]特性定義多個屬性&#xff0c;有沒有更簡便的方式&#xff1f; 我們可以使用定義 IDictionar…

DeepSeek 的創新融合:多行業應用實踐探索

引言 在數字化轉型的浪潮中&#xff0c;技術的融合與創新成為推動各行業發展的關鍵力量。藍耘平臺作為行業內備受矚目的創新平臺&#xff0c;以其強大的資源整合能力和靈活的架構&#xff0c;為企業提供了高效的服務支持。而 DeepSeek 憑借先進的人工智能技術&#xff0c;在自然…

STM32創建靜態庫lib

創建靜態庫lib 1. 新建工程1.1 創建工程文件夾1.2 編寫用戶相關代碼1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 標準庫配置&#xff1a;stm32f4xx_conf.h1.2.4 HAL庫的配置&#xff1a;stm32f4xx_hal_conf.h1.2.5 LL庫配置&#xff1a;stm32f4xx_ll_conf.h 1.3 移植通用文…

elabradio入門第二講——BPSK數字調制與解調(插值、升余弦濾波、速率匹配、符號同步)

數字信號可以通過數字基帶傳輸系統進行傳輸&#xff0c;而基帶傳輸系統僅僅適用于低頻信道下的數字信號傳輸。然而&#xff0c;在實際的通信系統中信道通常具有帶通特性&#xff0c;因而需要將基帶信號搬移到適合信道傳輸的高頻載波上&#xff0c;使得信號與信道相匹配&#xf…

汽車 OTA 升級:提升下載與升級速度,優化用戶體驗

摘要&#xff1a; 隨著汽車智能化的飛速發展&#xff0c;OTA&#xff08;Over - the - Air&#xff09;升級已成為汽車行業的重要技術&#xff0c;它能為車輛持續帶來功能更新與性能優化。然而&#xff0c;下載及升級速度較慢的問題常常影響用戶體驗。本文深入探討在汽車 OTA …

【Spring+MyBatis】留言墻的實現

目錄 1. 添加依賴 2. 配置數據庫 2.1 創建數據庫與數據表 2.2 創建與數據庫對應的實體類 3. 后端代碼 3.1 目錄結構 3.2 MessageController類 3.3 MessageService類 3.4 MessageMapper接口 4. 前端代碼 5. 單元測試 5.1 后端接口測試 5.2 使用前端頁面測試 在Spri…

SQLite Select 語句詳解

SQLite Select 語句詳解 SQLite 是一個輕量級的數據庫管理系統&#xff0c;以其簡潔的設計和高效的性能被廣泛應用于各種場景。在 SQLite 中&#xff0c;SELECT 語句是用于查詢數據庫中的數據的命令。本文將詳細介紹 SQLite 的 SELECT 語句&#xff0c;包括其基本語法、常用功…

深度學習05 ResNet殘差網絡

目錄 傳統卷積神經網絡存在的問題 如何解決 批量歸一化BatchNormalization, BN 殘差連接方式 ?殘差結構 ResNet網絡 ResNet 網絡是在 2015年 由微軟實驗室中的何凱明等幾位大神提出&#xff0c;斬獲當年ImageNet競賽中分類任務第一名&#xff0c;目標檢測第一名。獲得CO…

組件庫地址

react&#xff1a; https://react-vant.3lang.dev/components/dialoghttps://react-vant.3lang.dev/components/dialog vue用v2的 Vant 2 - Mobile UI Components built on Vue

docker 進階命令(基于Ubuntu)

數據卷 Volume: 目錄映射, 目錄掛載 匿名綁定: 匿名綁定的 volume 在容器刪除的時候, 數據卷也會被刪除, 匿名綁定是不能做到持久化的, 地址一般是 /var/lib/docker/volumes/xxxxx/_data 綁定卷時修改宿主機的目錄或文件, 容器內的數據也會同步修改, 反之亦然 # 查看所有 vo…

從入門到精通:Postman 實用指南

Postman 是一款超棒的 API 開發工具&#xff0c;能用來測試、調試和管理 API&#xff0c;大大提升開發效率。下面就給大家詳細講講它的安裝、使用方法&#xff0c;再分享些實用技巧。 一、安裝 Postman 你能在 Postman 官網&#xff08;https://www.postman.com &#xff09;下…

將圖片base64編碼后,數據轉成圖片

將圖片數據進行base64編碼后&#xff0c;可以在瀏覽器上查看圖片&#xff0c;只需在前端加上data:image/png;base64,即可 在線工具&#xff1a; Base64轉圖片 - 加菲工具

【動態規劃】詳解 0-1背包問題

文章目錄 1. 問題引入2. 從 dfs 到動態規劃3. 動態規劃過程分析4. 二維 dp 的遍歷順序5. 從二維數組到一維數組6. 一維數組的遍歷次序7. 背包的遍歷順序8. 代碼總結9. 總結 1. 問題引入 0-1 背包是比較經典的動態規劃問題&#xff0c;這里以代碼隨想錄里面的例子來介紹下。總的…