初學者指南:Redis 是什麼?完整介紹與應用解析

初學者指南:Redis 是什麼?完整介紹與應用解析

FacebookLinkedInTweet更新日期: 2025 年 3 月 4 日

本文為 NoSQL 基本介紹系列文,第 5 篇:

SQL 與 NoSQL 的差異:新手指南

MongoDB 入門指南:靈活高效的 NoSQL 資料庫

硬碟是什麼?從發展史到現代儲存技術的演變

記憶體是什麼?從發展史到現代電腦的核心元件

初學者指南:Redis 是什麼?完整介紹與應用解析 👈進度

在現代的應用開發中,資料庫的性能往往是決定系統效能的關鍵因素。

無論是網站、手機應用程式,還是各種數據密集型應用,如何快速存取數據成為開發者最關心的問題之一。

這時候,Redis 便成為一個不可忽視的解決方案。

Redis 是一種高效的鍵值(Key-Value)資料庫,主要用於快取、會話管理、即時分析等場景。

它以極快的讀寫速度、豐富的資料結構、支援分散式與持久化等特性,成為許多開發者提升應用效能的重要工具。

本篇文章將詳細介紹 Redis 是什麼、其核心特性、常見應用場景,以及如何開始使用 Redis,讓初學者也能輕鬆上手這款強大的資料庫技術。

什麼是鍵值(Key-Value)資料庫?

鍵值(Key-Value)資料庫是一種 NoSQL 資料庫類型,它的數據儲存方式非常簡單,類似於 字典(Dictionary)或哈希表(Hash Table)。

每筆資料都有一個唯一的「鍵(Key)」,對應一個「值(Value)」。

這種類型的資料庫擅長 高速讀取、寫入與擴展性,因此常用於快取系統、會話管理、即時數據處理等應用場景。

鍵值(Key-Value)資料庫的運作方式

鍵值資料庫的工作原理類似於一個 字典(Dictionary),舉個例子:

Key(鍵)Value(值)"user:1001"{"name": "Alice", "age": 25, "email": "[email protected]"}"user:1002"{"name": "Bob", "age": 30, "email": "[email protected]"}

範例操作(以 Redis 為例)

存入資料

SET user:1001 '{"name": "Alice", "age": 25, "email": "[email protected]"}'

取得資料

GET user:1001

返回結果

{"name": "Alice", "age": 25, "email": "[email protected]"}

在這個例子中:

Key(鍵) 是 "user:1001"

Value(值) 是一個 JSON 字串 {"name": "Alice", "age": 25, "email": "[email protected]"}

這種存取方式非常快速,因為資料庫可以直接透過 Key 查找到對應的 Value,不需要像關聯式資料庫(SQL)一樣執行複雜的查詢。

鍵值資料庫 vs. 關聯式資料庫(SQL)

特性鍵值(Key-Value)資料庫關聯式資料庫(SQL)數據結構Key-Value(鍵值對)表格(Table)、行列(Row-Column)查詢方式透過 Key 直接查找使用 SQL 查詢(如 SELECT * FROM users WHERE id = 1001)擴展性易於水平擴展(Scaling Out)需透過分區(Sharding)或索引優化適用場景快取、Session 管理、排行榜、計數器結構化數據存儲、複雜查詢讀取速度極快(O(1) 時間複雜度)需要索引或篩選條件查詢,速度較慢

鍵值(Key-Value)資料庫的特點

極快的讀寫速度(O(1) 時間複雜度)

由於數據是根據 Key 直接存取,所以檢索速度極快,適合需要高性能的應用。

結構簡單,靈活性高

只需存儲 Key-Value,無需定義固定的結構(不像 SQL 需要設計表格)。

高可擴展性

Key-Value 資料庫容易做 分布式擴展,適合大規模應用。

適合快取與即時數據處理

由於 Key-Value 檢索速度快,常用於 快取(Cache)、Session 管理、計數器、分散式鎖 等場景。

常見的鍵值資料庫

資料庫主要特點使用場景Redis高速記憶體儲存,支援持久化,支援多種數據結構快取、即時數據、排行榜、Session 管理Amazon DynamoDB亞馬遜 AWS 提供的 NoSQL 服務,可自動擴展雲端應用、大規模數據存儲Etcd用於分散式系統的 Key-Value 存儲,支援一致性協議Kubernetes、配置管理Memcached純記憶體快取,速度極快,但不支援持久化快取、降低資料庫查詢負擔

MongoDB 是鍵值資料庫嗎?

MongoDB 屬於 NoSQL(非關聯式資料庫)的一種,但它不是純粹的鍵值資料庫(Key-Value Database)。MongoDB 更準確的分類是:

文件型(Document-Oriented)資料庫,因為它存儲的是結構化的 JSON 文件(實際上是 BSON)。

支援靈活的查詢,不像典型的 Key-Value 資料庫只能透過 Key 存取。

雖然 MongoDB 的資料以 JSON 格式 存儲,並且 JSON 內部確實包含 Key-Value 結構,例如:

{

"_id": "12345",

"name": "Alice",

"age": 25,

"email": "[email protected]",

"address": {

"street": "123 Main St",

"city": "New York"

}

}

但 MongoDB 不只是透過「鍵」來存取「值」,它還支援:

複雜的篩選與查詢(類似 SQL): db.users.find({ "name": "Alice" })

索引(Indexing),加速查詢。

嵌套結構與關聯,如 address 欄位內含多個鍵值。

MongoDB vs. 鍵值資料庫(Redis)的關鍵差異

特性MongoDB(文件型資料庫)Redis / Key-Value 資料庫數據結構JSON(BSON)文件Key-Value(純鍵值存取)查詢方式可以根據 Key,也可以查詢特定欄位(如 name: "Alice")只能透過 Key 存取索引支援索引,查詢更快不支援索引(通常用於快取)嵌套資料支援(JSON 文件內可以包含其他 JSON)不支援嵌套,只能用單純值或結構化資料(Hash、List)使用場景適合儲存結構化/非結構化數據,如使用者資料、產品資訊適合快取、排行榜、Session 管理、計數器

MongoDB vs. 純 Key-Value 資料庫

MongoDB 能根據欄位查詢,而 Key-Value 資料庫只能根據 Key 查找

MongoDB:

db.users.find({ "name": "Alice" }) // 可以根據 name 查詢

Redis(或純 Key-Value DB):

GET user:1001 # 只能透過 Key 來存取,無法查詢內部欄位

差異點:MongoDB 提供更靈活的查詢方式,而 Key-Value 資料庫只能根據 Key 取值。

MongoDB 支援嵌套結構,而 Key-Value 資料庫不支援

MongoDB(可以儲存嵌套的 JSON)

{

"_id": "12345",

"name": "Alice",

"address": {

"street": "123 Main St",

"city": "New York"

}

}

Redis(通常只能存儲單一值,無法存入複雜結構)

SET user:1001 "Alice"

差異點:MongoDB 可用 JSON 儲存完整的文件,Key-Value 資料庫則通常只能存單一值或基本數據結構。

MongoDB 主要用於長期數據存儲,Key-Value 資料庫主要用於快取

MongoDB:儲存完整的應用數據,如使用者資訊、商品資訊、訂單記錄。

Redis / Key-Value DB:適用於快取(Cache)、排行榜、Session 管理,如果系統重啟,可能會清除資料。

MongoDB 可以當作鍵值資料庫來使用嗎?

可以,但不建議!雖然 MongoDB 支援根據 _id 存取特定文件,類似於 Key-Value 存取方式:

db.users.findOne({ "_id": "12345" })

但如果你的需求只是 快取、Session 管理、排行榜、計數器,MongoDB 的效能不如 Redis,因為:

MongoDB 需要查詢與索引,這比直接存取 Key-Value 慢。

MongoDB 消耗更多存儲空間(BSON 格式比純 Key-Value 需要更多儲存空間)。

Redis 直接從記憶體讀取,速度比 MongoDB 快很多。

Redis 是什麼?

Redis(Remote Dictionary Server,遠端字典伺服器)是一種開源的記憶體資料庫,主要用來存儲鍵值(Key-Value)對,並支援多種資料結構。

例如字串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash)等。

Redis 的基本特性

graph TD

A[用戶請求] -->|查詢資料| B[應用伺服器]

subgraph "快取層"

C["Redis(記憶體快取)"]

end

subgraph "資料庫層"

D["SQL 資料庫(如 MySQL, PostgreSQL)"]

end

B -->|先查詢快取| C

C -- 有快取 --> B

C -- 無快取 --> D

D -->|回傳資料,並存入 Redis| C

B -->|回應用戶| A

基於記憶體運作,速度極快:

Redis 主要將數據存放在 RAM 中,因此讀寫速度極快,相較於傳統關聯式資料庫(如 MySQL、PostgreSQL),它的效能可以提升數十倍甚至上百倍。

支援多種資料結構:

除了基本的鍵值存儲,Redis 還支援 列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash),這讓它能夠適用於不同的應用場景。

支援持久化機制:

雖然 Redis 是記憶體型資料庫,但它提供了 RDB(快照) 和 AOF(追加式記錄) 兩種持久化機制,確保數據不會因為系統崩潰而完全丟失。

支援分散式與叢集架構:

Redis 原生支援 Master-Slave(主從)架構,並且提供 Redis Cluster,允許系統水平擴展,適應大規模應用需求。

提供 Pub/Sub 訊息機制:

Redis 內建 發佈/訂閱(Publish/Subscribe) 功能,可用於即時通訊、訊息佇列等應用。

Redis 的應用場景

由於 Redis 具備高效的讀寫速度與多樣化的資料結構,它在許多領域都有廣泛的應用,以下是一些最常見的 Redis 使用場景:

1. 快取(Cache)

Redis 最常見的用途之一就是作為快取,以減少資料庫查詢壓力,加快應用的響應時間。例如:

網頁快取:將動態內容的計算結果暫存,提高網頁加載速度。

API 回應快取:對重複請求的 API 回應做暫存,降低伺服器負載。

2. 會話管理(Session Management)

許多網站使用 Redis 來存儲用戶的會話數據,因為它的內存存取速度快,能夠快速存取用戶登錄狀態、購物車等資訊。

3. 計數器與排名系統

Redis 的 原子性遞增/遞減(INCR/DECR) 操作非常適合計數應用,例如:

網站瀏覽量統計

用戶點擊數

遊戲排行榜(使用有序集合 Sorted Set 來實現)

4. 分散式鎖(Distributed Lock)

在多伺服器環境下,Redis 可用來實現分散式鎖機制,確保多個應用程式不會同時修改同一份資料,避免競爭條件(Race Condition)問題。

5. 訊息佇列與即時通知

Redis 提供 Pub/Sub(發佈/訂閱)功能,可以用於即時通訊系統,如:

聊天室訊息推送

即時通知(如推播、訂單狀態變更)

Redis 與 MongoDB 的數據存儲方式

graph TD

A[CPU] -->|快取數據| B(RAM 記憶體)

A -->|指令與運算| B

B -->|"存取快取/記憶體資料"| A

B -->|載入應用程式數據| C(HDD/SSD 硬碟)

%% Redis 運作於記憶體層級

subgraph "記憶體(RAM)層"

D["Redis(記憶體資料庫)"] -->|極高速存取| B

end

%% MongoDB 與 SQL 存儲於硬碟

subgraph "硬碟(HDD/SSD)層"

E["MongoDB(NoSQL 文件型資料庫)"] -->|讀取/寫入文件| C

F["SQL 資料庫(如 MySQL, PostgreSQL)"] -->|讀取/寫入結構化數據| C

end

%% MongoDB 與 SQL 會透過快取加速存取

B -->|載入快取數據| D

Redis:主要儲存在記憶體

Redis 是 記憶體型(In-Memory)資料庫,這意味著:

數據主要存放在 RAM 中,這使得它的讀取速度極快(比傳統硬碟存取快上百倍)。

但如果電腦斷電,未持久化的數據會丟失,所以 Redis 提供了 持久化機制(RDB & AOF)。

💡 Redis 如何決定數據存放位置?

預設情況下,所有數據都存放在 RAM(記憶體)。

你可以開啟 RDB(快照)或 AOF(追加式記錄),這樣 Redis 會定期將數據存入硬碟:

RDB(Redis Database):定時將記憶體數據存入硬碟,減少 I/O 操作。

AOF(Append-Only File):每次有新數據時,會將變更記錄存入硬碟,確保數據不會丟失。

MongoDB:主要儲存在硬碟,但會使用記憶體快取

MongoDB 是 文件型 NoSQL 資料庫,它的數據主要存放在硬碟(Disk),但同時也會使用記憶體(RAM)來加速存取。

💡 MongoDB 如何決定數據存放位置?

預設情況下,所有數據都寫入 硬碟(Disk)。

但為了加速查詢,MongoDB 使用 內建的快取機制:

最近使用的數據會被載入記憶體(RAM),類似於作業系統的「頁面快取(Page Cache)」。

當 MongoDB 需要存取數據時,會先檢查記憶體,如果數據已經載入,就不需要讀取硬碟,速度更快。

如果記憶體不足,則會釋放舊數據,確保新數據能夠被載入。

👉 這樣的機制讓 MongoDB 既能保證數據長期存儲在硬碟,又能透過記憶體加速存取。

電腦如何知道應該用記憶體還是硬碟?

這其實是由 應用程式的設計 + 作業系統的記憶體管理機制 決定的。

📌 應用程式(MongoDB / Redis)會明確告訴作業系統該怎麼存儲數據

Redis 預設將所有數據存放在記憶體中,除非你開啟持久化,它才會將數據寫入硬碟。

MongoDB 預設將數據存入硬碟,但會讓作業系統幫忙「快取」熱數據到記憶體。

📌 作業系統的記憶體管理

當應用程式需要大量記憶體時,作業系統會決定哪些數據應該保留在 RAM,哪些應該寫入硬碟。

如果記憶體不夠,作業系統可能會使用「虛擬記憶體(Swap)」來將部分數據暫存到硬碟,但這會降低效能。

📌 安裝時不需要手動指定存放位置

在安裝 Redis 或 MongoDB 時,不需要特別設定「這些數據要放 RAM,那些數據要放硬碟」,因為這是應用程式自動決定的。

但是,你可以手動調整配置,例如:

修改 Redis 設定檔 來開啟持久化(redis.conf)

調整 MongoDB 記憶體使用量 來最佳化效能(wiredTigerCacheSizeGB)

總結

問題RedisMongoDB數據預設存放位置記憶體(RAM)硬碟(Disk)是否支援持久化?是(可選 RDB / AOF)是(所有數據預設存於硬碟)如何使用記憶體?主要儲存在記憶體,速度極快會使用記憶體作為快取,但數據長期存儲在硬碟應用程式是否自動決定存放位置?是,預設在 RAM,開啟持久化後才寫入硬碟是,預設存硬碟,但會自動將熱數據載入 RAM能否手動調整?可以設定 RDB/AOF可以調整快取大小(wiredTigerCacheSizeGB)

👉 結論

Redis:主要存放在記憶體,除非開啟持久化,否則數據不會寫入硬碟。

MongoDB:主要存放在硬碟,但會使用記憶體快取熱數據,加速讀取。

作業系統不需要手動指定存放位置,應用程式會自動決定,但你可以調整配置來最佳化效能。

如何開始使用 Redis?

如果你是第一次接觸 Redis,可以透過以下步驟開始學習與實作:

安裝 Redis

Redis 支援多種作業系統,以下是安裝方式:

(1)Linux / macOS 安裝

# 使用 Homebrew 安裝(macOS)

brew install redis

# 使用 apt 安裝(Ubuntu)

sudo apt update

sudo apt install redis-server

# 啟動 Redis

redis-server

(2)Windows 安裝

官方不提供 Windows 版 Redis,但可以使用 WSL(Windows Subsystem for Linux) 或下載社群版 Redis。

連線 Redis

安裝完成後,可以使用 Redis CLI 進行測試:

redis-cli

然後嘗試執行以下指令:

SET name "Redis 初學者指南"

GET name

如果成功返回 "Redis 初學者指南",表示 Redis 正常運作!

基本指令介紹

Redis 的操作以 鍵值(Key-Value) 形式存儲數據,以下是一些基本指令:

指令說明SET key value設定鍵值對GET key取得指定鍵的值DEL key刪除鍵INCR key遞增數值DECR key遞減數值LPUSH list value將值加入列表左側RPUSH list value將值加入列表右側LPOP list取出列表左側的值RPOP list取出列表右側的值

這些指令是 Redis 最基礎的操作,學會後可以進一步學習進階應用,如 Lua 腳本、Redis 叢集等。

結論

Redis 是一款高效、靈活且用途廣泛的記憶體資料庫,不論是作為快取、會話管理、計數器、排行榜、訊息佇列等場景,都是提升應用效能的利器。

對於初學者而言,理解 Redis 的核心概念、學習基本指令,並動手實作一些應用場景,是入門 Redis 最好的方式。

如果你正在尋找一款高性能的資料庫來優化系統效能,Redis 絕對值得學習與使用!

希望這篇指南能幫助你更快地掌握 Redis 的基礎知識,讓你在未來的開發中得心應手。

相关数据

深度解析从古罗马到现代欧洲的“性放纵”风气
microsoft 365下载

深度解析从古罗马到现代欧洲的“性放纵”风气

⌛ 07-27 👁️ 939
1000克等于多少毫升(1000g等于1000ml吗)
365是英国的哪家公司

1000克等于多少毫升(1000g等于1000ml吗)

⌛ 07-28 👁️ 8101
第43届世界丽人大赛北京赛区盛大启幕
microsoft 365下载

第43届世界丽人大赛北京赛区盛大启幕

⌛ 07-14 👁️ 9107