☕ NEW! 完成新手任務即可參加抽獎!LINE 星巴克禮券等你拿,名額有限!        🎉 推廣活動:邀請好友註冊 DevLearn,累積推薦抽 LINE 星巴克禮券! 活動詳情 →        🔥 活動期間 2026/4/1 - 5/31 |已有 0 人參加       
redis 初學

🔴 Redis 入門:什麼是快取?為什麼需要 Redis?

📌 什麼是快取(Cache)?

想像你在圖書館找一本書:

  • 沒有快取 = 每次都要到倉庫裡翻找,花很多時間
  • 有快取 = 把常用的書放在桌上,隨手就能拿到

快取就是把經常存取的資料放在「更快的地方」,避免每次都去存取較慢的資料來源(如資料庫)。

為什麼需要快取?

使用者請求 → API Server → 資料庫查詢(慢!50ms+)
使用者請求 → API Server → 快取命中(快!<1ms)
情境 沒有快取 有快取
商品頁面載入 每次查 DB,50ms 快取命中,<1ms
首頁排行榜 聯合查詢,200ms 快取命中,<1ms
每秒 1000 請求 DB 扛不住 快取擋住 90%

📌 記憶體快取 vs 分散式快取

記憶體快取(In-Memory Cache)

// ASP.NET Core 內建的 IMemoryCache
builder.Services.AddMemoryCache();

public class ProductService
{
    private readonly IMemoryCache _cache;

    public ProductService(IMemoryCache cache)
    {
        _cache = cache;
    }

    public Product GetProduct(int id)
    {
        // 嘗試從快取取得
        if (_cache.TryGetValue($"product:{id}", out Product product))
            return product;

        // 快取沒有,查資料庫
        product = _db.Products.Find(id);

        // 放入快取,5 分鐘過期
        _cache.Set($"product:{id}", product, TimeSpan.FromMinutes(5));
        return product;
    }
}

限制: 只存在單一伺服器的記憶體中,多台伺服器之間不共享。

分散式快取(Distributed Cache)

Server A ─┐
Server B ─┼──→ Redis(共用快取)
Server C ─┘

優勢: 所有伺服器共享同一份快取,資料一致。


📌 Redis 是什麼?

Redis = Remote Dictionary Server(遠端字典伺服器)

  • 開源的 記憶體資料結構儲存庫
  • 支援多種資料型態(String、List、Hash、Set、Sorted Set)
  • 單執行緒模型,避免鎖的問題
  • 持久化支援(RDB / AOF)
  • 支援主從複製、哨兵、Cluster

Redis vs Memcached 比較

特性 Redis Memcached
資料型態 豐富(5+ 種) 只有 String
持久化 支援 RDB/AOF 不支援
叢集 原生 Cluster 客戶端分片
Pub/Sub 支援 不支援
Lua 腳本 支援 不支援
記憶體效率 稍低 較高
多執行緒 單執行緒(6.0+ I/O 多執行緒) 多執行緒

📌 Redis 安裝(Docker 方式)

# 拉取 Redis 映像
docker pull redis:latest

# 啟動 Redis 容器
docker run -d --name my-redis \
  -p 6379:6379 \
  redis:latest

# 驗證 Redis 是否運行
docker exec -it my-redis redis-cli ping
# 回應: PONG

Docker Compose 版本

# docker-compose.yml
version: '3.8'
services:
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    command: redis-server --appendonly yes

volumes:
  redis-data:

📌 Redis CLI 基本操作

# 連線到 Redis
docker exec -it my-redis redis-cli

# SET:設定鍵值
SET mykey "Hello Redis"
# OK

# GET:取得值
GET mykey
# "Hello Redis"

# DEL:刪除鍵
DEL mykey
# (integer) 1

# KEYS:列出所有符合的鍵(生產環境慎用!)
KEYS *
KEYS user:*

# EXISTS:檢查鍵是否存在
EXISTS mykey
# (integer) 0

# TTL:查看剩餘存活時間
SET session:abc "data" EX 60
TTL session:abc
# (integer) 58

📌 Redis 適用場景

場景 說明 使用的資料型態
Session 儲存 分散式 Session 管理 String / Hash
排行榜 遊戲分數、熱門文章 Sorted Set
計數器 按讚數、瀏覽次數 String (INCR)
訊息佇列 非同步任務處理 List / Stream
即時通訊 聊天室、通知推送 Pub/Sub
限流 API Rate Limiting String (INCR + EXPIRE)
地理位置 附近的人、店家搜尋 Geo

🔑 重點整理

  1. 快取是把常用資料放在更快的存取層,減少 DB 壓力
  2. 記憶體快取只在單機有效,分散式快取多台伺服器共享
  3. Redis 是最流行的分散式快取,支援豐富資料型態
  4. Docker 可以快速啟動 Redis 開發環境
  5. Redis CLI 的 SET/GET/DEL/KEYS 是最基本的操作

💡 大家的想法 · 0

載入中...
💬 即時聊天室 🟢 0 人在線
😀 😎 🤓 💻 🎮 🎸 🔥
➕ 新問題
📋 我的工單
💬 LINE 社群
🔒
需要註冊才能使用此功能
註冊帳號即可解鎖測驗、遊戲、簽到、筆記下載等所有功能,完全免費!
免費註冊