Redis數據庫入門教程

Redis(Remote Dictionary Server)是一個開源的、基于內存的高性能鍵值存儲系統,它可以用作數據庫、緩存和消息中間件。本教程將帶你從零開始全面學習Redis,涵蓋基礎概念、安裝配置、數據結構、持久化機制以及與Python的交互等內容。

一、NoSQL與Redis簡介

1.1 NoSQL概述

NoSQL(Not Only SQL)是一類非關系型數據庫的總稱,與傳統的關系型數據庫(如MySQL)相比,具有以下特點:

  • 數據結構靈活:不遵循固定的表結構,支持鍵值對、文檔、列存儲、圖等多種數據模型

  • 高擴展性:通常設計為分布式架構,易于水平擴展

  • 高性能:針對特定場景優化,讀寫速度遠超傳統數據庫

  • 高可用性:支持自動分區和復制

常見NoSQL數據庫類型

  • 鍵值存儲:Redis、Memcached

  • 文檔數據庫:MongoDB、CouchDB

  • 列存儲數據庫:HBase、Cassandra

  • 圖數據庫:Neo4j

1.2 Redis簡介

Redis是一個開源的高性能鍵值數據庫,由Salvatore Sanfilippo開發,具有以下特點:

  • 內存存儲:數據主要存儲在內存中,讀寫性能極高(讀11萬次/秒,寫8.1萬次/秒)

  • 持久化支持:可以將內存數據保存到磁盤,重啟后重新加載

  • 豐富的數據類型:支持字符串、哈希、列表、集合、有序集合等

  • 原子操作:所有操作都是原子性的,支持事務

  • 發布訂閱:支持消息的發布/訂閱模式

  • 主從復制:支持數據的主從同步

Redis典型應用場景

  • 緩存系統(減輕數據庫壓力)

  • 計數器(如網站訪問量)

  • 消息隊列系統

  • 實時排行榜

  • 社交網絡(如粉絲關系)

  • 會話緩存(替代Session存儲)

二、Redis安裝與配置

2.1 Linux系統安裝Redis

方法一:使用包管理器安裝(Ubuntu/Debian)
sudo apt-get update
sudo apt-get install redis-server
方法二:源碼編譯安裝
# 下載Redis源碼
wget http://download.redis.io/releases/redis-6.2.4.tar.gz# 解壓
tar -zxvf redis-6.2.4.tar.gz# 編譯安裝
cd redis-6.2.4
make
sudo make install

2.2 Redis基本配置

Redis的配置文件通常位于/etc/redis/redis.conf,主要配置項包括:

# 綁定IP地址(如需遠程訪問可注釋掉或設為0.0.0.0)
bind 127.0.0.1# 監聽端口
port 6379# 是否以守護進程運行
daemonize yes# 數據文件名稱
dbfilename dump.rdb# 數據文件存儲路徑
dir /var/lib/redis# 日志文件路徑
logfile /var/log/redis/redis-server.log# 數據庫數量
databases 16# 設置密碼
requirepass yourpassword

2.3 Redis服務管理

# 啟動Redis服務
sudo service redis start# 停止Redis服務
sudo service redis stop# 重啟Redis服務
sudo service redis restart# 查看Redis狀態
sudo service redis status# 使用配置文件啟動
redis-server /path/to/redis.conf

2.4 Redis客戶端連接

# 連接本地Redis
redis-cli# 連接遠程Redis(帶密碼)
redis-cli -h host -p port -a password# 測試連接
127.0.0.1:6379> ping
PONG# 切換數據庫(0-15)
127.0.0.1:6379> select 1
OK

三、Redis數據結構與操作

Redis支持五種主要數據結構:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。

3.1 字符串(String)

字符串是Redis最基本的數據類型,可以存儲文本、數字或二進制數據(最大512MB)。

常用命令

# 設置鍵值
SET key value# 獲取鍵值
GET key# 設置鍵值及過期時間(秒)
SETEX key seconds value# 設置多個鍵值
MSET key1 value1 key2 value2# 獲取多個鍵值
MGET key1 key2# 值追加
APPEND key value# 值遞增
INCR key
INCRBY key increment# 值遞減
DECR key
DECRBY key decrement# 獲取字符串長度
STRLEN key

示例

127.0.0.1:6379> SET name "Redis"
OK
127.0.0.1:6379> GET name
"Redis"
127.0.0.1:6379> SETEX session_id 3600 "abc123"
OK
127.0.0.1:6379> MSET age 30 city "New York"
OK
127.0.0.1:6379> MGET name age city
1) "Redis"
2) "30"
3) "New York"
127.0.0.1:6379> INCR age
(integer) 31

3.2 哈希(Hash)

哈希適合存儲對象,可以將多個字段-值對存儲在一個鍵中。

常用命令

# 設置單個字段
HSET key field value# 設置多個字段
HMSET key field1 value1 field2 value2# 獲取單個字段值
HGET key field# 獲取多個字段值
HMGET key field1 field2# 獲取所有字段和值
HGETALL key# 獲取所有字段名
HKEYS key# 獲取所有字段值
HVALS key# 刪除字段
HDEL key field1 field2# 判斷字段是否存在
HEXISTS key field# 獲取字段數量
HLEN key

示例

127.0.0.1:6379> HSET user:1000 name "John" age 30
(integer) 2
127.0.0.1:6379> HGET user:1000 name
"John"
127.0.0.1:6379> HGETALL user:1000
1) "name"
2) "John"
3) "age"
4) "30"
127.0.0.1:6379> HINCRBY user:1000 age 1
(integer) 31

3.3 列表(List)

列表是簡單的字符串列表,按照插入順序排序,可以在頭部或尾部添加元素。

常用命令

# 從左側插入元素
LPUSH key value1 value2# 從右側插入元素
RPUSH key value1 value2# 從左側彈出元素
LPOP key# 從右側彈出元素
RPOP key# 獲取列表片段
LRANGE key start stop# 獲取列表長度
LLEN key# 根據索引獲取元素
LINDEX key index# 在指定元素前后插入新元素
LINSERT key BEFORE|AFTER pivot value# 根據值移除元素
LREM key count value# 設置指定索引處的元素值
LSET key index value# 保留指定范圍內的元素
LTRIM key start stop

示例

127.0.0.1:6379> LPUSH fruits "apple" "banana" "orange"
(integer) 3
127.0.0.1:6379> LRANGE fruits 0 -1
1) "orange"
2) "banana"
3) "apple"
127.0.0.1:6379> RPUSH fruits "pear"
(integer) 4
127.0.0.1:6379> LRANGE fruits 0 -1
1) "orange"
2) "banana"
3) "apple"
4) "pear"
127.0.0.1:6379> LPOP fruits
"orange"

3.4 集合(Set)

集合是無序的字符串集合,元素唯一不重復,支持交集、并集、差集等操作。

常用命令

# 添加元素
SADD key member1 member2# 獲取所有元素
SMEMBERS key# 判斷元素是否存在
SISMEMBER key member# 獲取集合元素數量
SCARD key# 移除元素
SREM key member1 member2# 隨機彈出元素
SPOP key [count]# 隨機獲取元素
SRANDMEMBER key [count]# 集合運算
SINTER key1 key2      # 交集
SUNION key1 key2      # 并集
SDIFF key1 key2       # 差集

示例

127.0.0.1:6379> SADD tags "redis" "database" "nosql"
(integer) 3
127.0.0.1:6379> SMEMBERS tags
1) "nosql"
2) "database"
3) "redis"
127.0.0.1:6379> SADD tags2 "redis" "programming"
(integer) 2
127.0.0.1:6379> SINTER tags tags2
1) "redis"

3.5 有序集合(Sorted Set)

有序集合類似于集合,但每個元素都關聯一個分數(score),用于排序。

常用命令

# 添加元素
ZADD key score1 member1 score2 member2# 獲取元素分數
ZSCORE key member# 獲取元素排名(升序)
ZRANK key member# 獲取元素排名(降序)
ZREVRANK key member# 獲取指定范圍的元素
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]# 獲取分數范圍內的元素
ZRANGEBYSCORE key min max [WITHSCORES]# 獲取集合元素數量
ZCARD key# 獲取分數范圍內的元素數量
ZCOUNT key min max# 移除元素
ZREM key member1 member2# 增加元素分數
ZINCRBY key increment member

示例

127.0.0.1:6379> ZADD leaderboard 100 "Alice" 200 "Bob" 150 "Charlie"
(integer) 3
127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES
1) "Alice"
2) "100"
3) "Charlie"
4) "150"
5) "Bob"
6) "200"
127.0.0.1:6379> ZINCRBY leaderboard 50 "Alice"
"150"

四、Redis高級特性

4.1 鍵(Key)操作

# 查找鍵(支持通配符)
KEYS pattern# 判斷鍵是否存在
EXISTS key# 查看鍵類型
TYPE key# 刪除鍵
DEL key1 key2# 設置過期時間(秒)
EXPIRE key seconds# 設置過期時間(毫秒)
PEXPIRE key milliseconds# 設置過期時間(UNIX時間戳)
EXPIREAT key timestamp# 移除過期時間
PERSIST key# 查看剩余生存時間(秒)
TTL key# 查看剩余生存時間(毫秒)
PTTL key# 隨機返回一個鍵
RANDOMKEY# 重命名鍵
RENAME key newkey# 僅當新鍵不存在時重命名
RENAMENX key newkey

示例

127.0.0.1:6379> SET test "value" EX 60
OK
127.0.0.1:6379> TTL test
(integer) 58
127.0.0.1:6379> KEYS t*
1) "test"
127.0.0.1:6379> DEL test
(integer) 1

4.2 事務

Redis事務可以一次執行多個命令,具有以下特點:

  • 批量操作按順序執行

  • 執行過程中不會被其他命令打斷

  • 不具備原子性(部分失敗不會回滾)

基本命令

# 開始事務
MULTI# 執行事務
EXEC# 取消事務
DISCARD# 監視鍵(樂觀鎖)
WATCH key# 取消所有鍵的監視
UNWATCH

示例

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET name "Alice"
QUEUED
127.0.0.1:6379> INCR age
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (integer) 31

4.3 發布訂閱

Redis發布訂閱(pub/sub)實現了消息系統,發送者(publisher)發送消息到頻道(channel),訂閱者(subscriber)接收消息。

基本命令

# 訂閱一個或多個頻道
SUBSCRIBE channel1 channel2# 取消訂閱
UNSUBSCRIBE [channel1 channel2]# 發布消息到頻道
PUBLISH channel message# 按模式訂閱
PSUBSCRIBE pattern*# 取消模式訂閱
PUNSUBSCRIBE [pattern*]

示例

# 終端1:訂閱頻道
127.0.0.1:6379> SUBSCRIBE news
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "news"
3) (integer) 1# 終端2:發布消息
127.0.0.1:6379> PUBLISH news "Hello Redis!"
(integer) 1# 終端1將收到:
1) "message"
2) "news"
3) "Hello Redis!"

4.4 數據持久化

Redis提供兩種持久化方式:RDB和AOF。

RDB(Redis Database)
  • 定時生成內存快照

  • 性能高,文件緊湊

  • 可能丟失最后一次快照后的數據

配置

save 900 1       # 900秒內有1個更改則保存
save 300 10      # 300秒內有10個更改則保存
save 60 10000    # 60秒內有10000個更改則保存dbfilename dump.rdb
dir /var/lib/redis
AOF(Append Only File)
  • 記錄所有寫操作命令

  • 數據安全性更高

  • 文件體積較大

配置

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec  # 每秒同步
# appendfsync always  # 每次寫操作同步
# appendfsync no      # 由操作系統決定同步時機

比較

特性RDBAOF
持久化方式定時快照記錄寫操作命令
數據安全可能丟失數據最多丟失1秒數據
恢復速度
文件體積
性能影響保存時影響性能持續寫入影響較小

4.5 主從復制

Redis支持主從復制,主節點(master)負責寫操作,從節點(slave)負責讀操作。

配置主從復制

  1. 主節點配置

    bind 192.168.1.100
    port 6379

  2. 從節點配置

    bind 192.168.1.101
    port 6379
    slaveof 192.168.1.100 6379

驗證主從狀態

redis-cli info replication

輸出示例

# 主節點
role:master
connected_slaves:1
slave0:ip=192.168.1.101,port=6379,state=online,offset=1099,lag=1# 從節點
role:slave
master_host:192.168.1.100
master_port:6379
master_link_status:up

五、Redis與Python交互

5.1 安裝Redis Python客戶端

pip install redis

5.2 基本操作示例

import redis# 創建連接
r = redis.Redis(host='localhost', port=6379, db=0, password='yourpassword')# 字符串操作
r.set('name', 'Alice')
print(r.get('name'))  # 輸出: b'Alice'# 哈希操作
r.hset('user:1000', 'name', 'Bob')
r.hset('user:1000', 'age', 25)
print(r.hgetall('user:1000'))  # 輸出: {b'name': b'Bob', b'age': b'25'}# 列表操作
r.lpush('tasks', 'task1', 'task2')
print(r.lrange('tasks', 0, -1))  # 輸出: [b'task2', b'task1']# 集合操作
r.sadd('tags', 'python', 'redis', 'database')
print(r.smembers('tags'))  # 輸出: {b'python', b'redis', b'database'}# 有序集合操作
r.zadd('leaderboard', {'Alice': 100, 'Bob': 200, 'Charlie': 150})
print(r.zrange('leaderboard', 0, -1, withscores=True))  
# 輸出: [(b'Alice', 100.0), (b'Charlie', 150.0), (b'Bob', 200.0)]

5.3 使用連接池

import redis# 創建連接池
pool = redis.ConnectionPool(host='localhost', port=6379, db=0, password='yourpassword',max_connections=10
)# 從連接池獲取連接
r = redis.Redis(connection_pool=pool)# 使用連接...
r.set('foo', 'bar')
print(r.get('foo'))

5.4 發布訂閱示例

發布者

import redisr = redis.Redis()
r.publish('channel', 'Hello Redis!')

訂閱者

import redisr = redis.Redis()
pubsub = r.pubsub()
pubsub.subscribe('channel')for message in pubsub.listen():if message['type'] == 'message':print(f"Received: {message['data']}")

六、Redis最佳實踐

6.1 性能優化

  1. 合理使用數據結構:根據場景選擇最合適的數據結構

  2. 批量操作:使用MSET、HMGET等批量命令減少網絡開銷

  3. 管道(Pipeline):將多個命令一次性發送

    pipe = r.pipeline()
    pipe.set('foo', 'bar')
    pipe.get('foo')
    result = pipe.execute()

  4. 避免大鍵:單個鍵值不宜過大(建議小于1MB)

  5. 設置合理過期時間:避免內存無限增長

6.2 安全配置

  1. 設置密碼requirepass yourpassword

  2. 禁用危險命令

    rename-command FLUSHALL ""
    rename-command CONFIG ""

  3. 綁定IP:僅允許可信IP訪問

  4. 使用非默認端口:避免使用6379默認端口

  5. 限制內存maxmemory 2gb?+?maxmemory-policy allkeys-lru

6.3 監控與維護

  1. 監控命令

    redis-cli info         # 查看服務器信息
    redis-cli info memory  # 查看內存使用情況
    redis-cli info stats   # 查看統計信息

  2. 備份策略

    • 定期備份RDB文件

    • 考慮AOF與RDB結合使用

  3. 內存優化

    • 使用OBJECT ENCODING key查看編碼方式

    • 對小整數使用共享對象

    • 對短字符串使用embstr編碼

七、Redis常見問題解答

7.1 Redis為什么這么快?

  1. 內存存儲:數據主要存儲在內存中

  2. 單線程模型:避免多線程上下文切換和競爭條件

  3. IO多路復用:使用epoll/kqueue等高效IO模型

  4. 高效數據結構:專門設計的數據結構和編碼方式

7.2 Redis適合哪些場景?

  • 緩存系統

  • 會話存儲

  • 排行榜/計數器

  • 消息隊列

  • 實時系統

  • 社交網絡關系

7.3 Redis不適合哪些場景?

  • 數據量超過內存大小

  • 需要復雜SQL查詢

  • 需要完整ACID事務

  • 需要持久化存儲大數據集

7.4 如何選擇Redis持久化方式?

  • RDB:適合備份、災難恢復、快速重啟

  • AOF:適合數據安全性要求高的場景

  • RDB+AOF:生產環境推薦組合

八、學習資源推薦

  1. 官方文檔:Docs

  2. Redis中文網:http://www.redis.cn/

  3. 《Redis設計與實現》:深入理解Redis內部機制

  4. 《Redis實戰》:實用案例和最佳實踐

  5. Redis University:免費在線課程

通過本教程,你應該對Redis有了全面的了解。Redis功能強大但學習曲線平緩,建議結合實際項目多加練習,逐步掌握其高級特性和優化技巧。

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

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

相關文章

工業儀表識別(一)環境安裝

儀表識別環境安裝 1.cuda cuda 11.8 intall(cuda11.8、cuda12.6按照需求安裝) ref: https://developer.nvidia.com/cuda-11-8-0-download-archive?target_osLinux&target_archx86_64&DistributionUbuntu&target_vers…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第三十四課——車牌識別的FPGA實現(6)疊加車牌識別的信息

(本系列只需要modelsim即可完成數字圖像的處理,每個工程都搭建了全自動化的仿真環境,只需要雙擊top_tb.bat文件就可以完成整個的仿真,大大降低了初學者的門檻!!!!如需要該系列的工程…

Windows上用于跨平臺開發的環境工具

1. MSYS2(Minimal SYStem 2) 一款模擬Unix環境的軟件,可以執行unix命令。通過pacman管理工具,類似Ubuntu上apt-get,RedHat中的yum。 MSYS2最大好處就是能夠在Windows上輕松編譯一些由Unix環境工具鏈開發的工程&#…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-15,(知識點:DC-DC電源,BUCK電路,鐵損,銅損)

目錄 1、題目 2、解答 選項 A 選項 B 選項 C 選項 D 3、相關知識點 一、紋波 二、感量(電感量L) 三、開關頻率f 四、鐵損 五、銅損 題目匯總版: 【硬件-筆試面試題】硬件/電子工程師,筆試面試題匯總版,持…

Ethereum: 從 1e+21 到千枚以太幣:解密 Geth 控制臺的余額查詢

大家好今天,我們來聊一個新手在接觸以太坊節點時經常會遇到的場景。想象一下,我們成功運行了一個私有以太坊節點,并嘗試查詢一個賬戶的余額,然后我們看到了這樣一個返回結果:1e21。 這是什么意思?是出錯了&…

2025最新軟件測試面試八股文(含答案+文檔)

🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快 1、什么是POM,為什么要使用它?POM是Page Object Model的簡稱,它是一種設計思想,而不是框架。大概的意思是&#xff…

表格數據處理-TabNet模型使用說明(模型構建+SHAP)

一、模型介紹 論文為《TabNet: Attentive Interpretable Tabular Learning》發表于2021年,屬于Google Cloud AI。該研究針對表格數據提出了一種新的深度神經網絡(DNN)架構TabNet,旨在解決傳統深度學習在表格數據上表現不如決策樹模…

數據集成難在哪?制造企業該怎么做?

目錄 一、為什么你的數據集成總失敗? 1.數據沒有統一標準 2.數據 “斷點多”,打通成本高 3.數據 “用不起來”,價值難落地 二、數據集成的正確做法是什么? 第一步:明確 “集成為了誰”— 用業務目標倒推數據需求…

Datawhale AI數據分析 作業2

學生考試表現影響因素數據集第一步:數據概覽與清洗Prompt 1:加載StudentPerformanceFactors.csv文件,并顯示前5行數據以及各列的數據類型和非空值數量,檢查是否存在缺失值。處理缺失值是數據預處理的重要一步。對于您提到的缺失值&#xff1a…

Flowable 與 Spring Boot 深度集成:從環境搭建到平臺構建

在前三篇文章中,我們依次認識了 Flowable 的基礎概念、用 Modeler 設計流程,以及通過 API 控制流程運行。但在實際項目中,我們更需要將 Flowable 與 Spring Boot 深度融合,構建完整的工作流平臺。本文將從環境配置、設計器集成、權…

Jenkins最新版本的安裝以及集成Allure生成測試報告

目錄 Jenkins的安裝 將上面的目錄添加到系統環境變量中 為Jenkins配置密碼 創建一個用戶,用于登錄jenkins 為Jenkins安裝Allure插件 幾個大坑 使用jenkins集成python測試項目 Jenkins的安裝 Jenkins官方網址 Jenkins 點擊download 點擊 past Release選擇你想要下載…

Vue3 面試題及詳細答案120道 (1-15 )

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

基于 GitLab 實踐敏捷開發

在軟件開發中,**基于 GitLab 實踐敏捷開發**,并建立一套**規范的日常管理流程**,不僅可以提升團隊協作效率,還能確保平臺持續向好迭代、性能穩步提升。以下是一個完整的實踐方案,適用于中小型團隊或中大型項目&#xf…

黑馬點評使用Apifox導入接口測試合集(持續更新、詳細圖解)

目錄 一、前言 二、更新店鋪 三、添加秒殺券 四、秒殺下單和秒殺下單user2 一、前言 本博客將持續更新記錄黑馬點評所有接口測試的導入(學到哪更新到哪),以此博客為完整導入接口測試的合集。第一次在黑馬點評項目使用Apifox進行接口測試直接先看我前面的博客&a…

MYOJ_10583:CSP初賽題單7:計算機常識綜合練習

更多初賽題單請參見題目整理CSP初賽題目整理題單,謝謝。 注:閱讀此題單時建議先看1~5,再試著自己做。 題目描述 1. [J-2010-6][S-2010-6]提出“存儲程序”的計算機工作原理的是( )。 A. 克勞德香農 B. 戈登摩爾 C.…

代碼隨想錄day22回溯算法1

文章目錄77. 組合216.組合總和III17. 電話號碼的字母組合77. 組合 題目鏈接 文章講解 class Solution { public:vector<vector<int>> res; // 存儲所有的組合vector<int> path; // 當前正在構建的組合// 回溯算法void solve(int n, int k, int st…

【Android】Popup menu:彈出式菜單

Popup menu&#xff1a;彈出式菜單 PopupMenu&#xff0c;彈出菜單&#xff0c;一個模態形式展示的彈出風格的菜單&#xff0c;綁在在某個View上&#xff0c;一般出現在被綁定的View的下方&#xff08;如果下方有空間&#xff09;。 注意&#xff1a;彈出菜單是在API 11和更高版…

20250724-day21

Main Memory Database System&#xff08;MMDB&#xff09;&#xff1a;基于內存的數據庫系統 File Database&#xff08;FDB&#xff09;&#xff1a;基于文件的數據庫 Netware Database&#xff08;NDB&#xff09;&#xff1a;基于網絡的數據庫 daemon&#xff1a;守護進程 …

API是什么,如何保障API安全?

API&#xff08;應用程序編程接口&#xff09;是什么&#xff1f; API&#xff08;Application Programming Interface&#xff09;是不同軟件系統之間通信的“橋梁”。它定義了應用程序如何請求服務、交換數據或調用功能&#xff0c;無需了解底層實現細節。例如&#xff0c;當…

深度分析Java多線程機制

Java 多線程是掌握高性能、高響應性應用程序開發的關鍵&#xff0c;它涉及到語言特性、JVM 實現、操作系統交互以及并發編程的核心概念。 核心目標&#xff1a; 充分利用現代多核 CPU 的計算能力&#xff0c;提高程序吞吐量&#xff08;單位時間內處理的任務量&#xff09;和響…