GCP-115:Cloud Memorystore 入門——全託管記憶體資料庫完全指南
前言
應用要的是微秒級延遲的資料存取,像 Session 快取、遊戲排行榜、即時分析這類場景,這時候就輪到記憶體資料庫上場了。Cloud Memorystore 是 GCP 的全託管記憶體資料庫服務,支援 Redis、Valkey 和 Memcached。
這篇是 GCP 入門系列第 15 課,帶你搞懂 Memorystore 的核心概念,還有怎麼選。
什麼是 Cloud Memorystore?
Memorystore 是 GCP 的全託管記憶體資料庫,資料放在記憶體(RAM)裡而不是硬碟,所以讀寫延遲超低:
應用程式
│
├── 快取命中 → Memorystore(微秒級回應)
│
└── 快取未命中 → Cloud SQL / Firestore(毫秒級回應)
│
└── 寫回 Memorystore(下次命中)
四個產品
| 產品 | 說明 | 狀態 |
|---|---|---|
| Memorystore for Redis | 獨立 Redis 實例(Basic/Standard) | GA |
| Memorystore for Redis Cluster | 分片式 Redis 叢集 | GA |
| Memorystore for Valkey | 基於 Valkey(Redis 開源分支) | GA,推薦新專案使用 |
| Memorystore for Memcached | 託管 Memcached | 已棄用(2029/1/31 停止服務) |
Valkey 是 Redis 在 2024 年改授權之後,由 Linux Foundation 主導的開源分支(BSD 3-Clause),協議跟 Redis 完全相容。Google、AWS、Oracle 等都有一起支持。
Memorystore for Redis(獨立實例)
Basic vs Standard Tier
| 特性 | Basic Tier | Standard Tier |
|---|---|---|
| 高可用 | 無(單節點) | 跨可用區(zone)複製 + 自動故障轉移 |
| SLA | 無 | 99.9% |
| 讀取副本 | 無 | 最多 5 個 |
| 最大容量 | 300 GB | 300 GB |
| RDB 快照 | 支援 | 支援(從副本執行,不影響主節點) |
| 適合場景 | 開發測試、可容忍冷啟動 | 正式環境 |
Basic 和 Standard 無法互相升級,必須重新建立實例。
容量等級
| 等級 | 容量範圍 | 網路吞吐 |
|---|---|---|
| M1 | 1-4 GB | 10 Gbps |
| M2 | 5-10 GB | 10 Gbps |
| M3 | 11-35 GB | 10 Gbps |
| M4 | 36-100 GB | 16 Gbps |
| M5 | 101-300 GB | 16 Gbps |
建立與連接
# 建立 Standard Tier Redis 實例
gcloud redis instances create my-cache \
--size=5 \
--region=asia-east1 \
--tier=standard \
--redis-version=redis_7_2
# 查看實例資訊(含 Host/Port)
gcloud redis instances describe my-cache --region=asia-east1
# 從 VM 連接
redis-cli -h INSTANCE_HOST -p 6379
RDB 快照(備份)
# 快照間隔:1h / 6h / 12h / 24h
# 只保留最新一份快照,不額外收費
# 建議設 maxmemory-gb 為容量的 80%,預留 20% 給快照用
# 匯出到 Cloud Storage
gcloud redis instances export gs://my-bucket/backup.rdb \
my-cache --region=asia-east1
# 從 Cloud Storage 匯入(會中斷服務)
gcloud redis instances import gs://my-bucket/backup.rdb \
my-cache --region=asia-east1
Memorystore for Valkey(推薦新專案)
新專案 Google 第一個推 Valkey,效能比 Redis Cluster 更好:
核心優勢
- Valkey 8.0:比 Redis Cluster 吞吐量高達 2 倍
- 支援叢集模式和非叢集模式
- 每個分片:1 主節點 + 最多 5 副本
- 最大 250 個節點,容量達 14.5 TB
- 零停機擴縮:水平增減分片不中斷服務
- 跨區域複製(GA)
- 向量搜尋:內建向量相似度搜尋,支援 GenAI/RAG 應用
節點類型
| 節點類型 | vCPU | 可寫容量 | SLA |
|---|---|---|---|
| shared-core-nano | 0.5 | 1.12 GB | 無 |
| standard-small | 2 | 5.2 GB | 有 |
| highmem-medium | 2 | 10.4 GB | 有 |
| highmem-xlarge | 8 | 46.4 GB | 有 |
SLA
- 99.99%:多區域部署 + 副本
- 99.9%:單區域 + 副本
- 無 SLA:shared-core-nano 或無副本
相容性
協議跟 Redis 完全相容,手上現有的 Redis 客戶端(Jedis、redis-py、ioredis 等)不用改就能直接接上。
Memorystore for Memcached(已棄用)
| 時間點 | 事件 |
|---|---|
| 2026/1/20 | 不再推薦使用 |
| 2027/2/1 | 新專案無法建立實例 |
| 2029/1/31 | 完全停止服務 |
Memcached 跟 Redis/Valkey 差最多的地方:
- 無持久化:純快取,重啟即遺失所有資料
- 無複製/故障轉移
- 僅支援簡單 Key-Value:無 List、Set、Sorted Set 等資料結構
Google 建議遷移至 Memorystore for Valkey。
網路架構
Memorystore 底下的產品全都沒有公開 IP,只能走 VPC 連進去:
┌─────────────────────────────────────────┐
│ VPC Network │
│ │
│ Compute Engine ──→ Memorystore (私有IP) │
│ GKE Pod ────────→ Memorystore (私有IP) │
│ │
│ Cloud Run ──→ VPC Connector ──→ Memorystore │
│ Cloud Functions → VPC Connector → Memorystore │
│ App Engine ───→ VPC Connector ──→ Memorystore │
└─────────────────────────────────────────┘
| 服務 | 連接方式 |
|---|---|
| Compute Engine | 直接透過 VPC(同一網路) |
| GKE | VPC-native 叢集直接連接 |
| Cloud Run | Serverless VPC Access Connector 或 Direct VPC Egress |
| Cloud Functions | Serverless VPC Access Connector |
| App Engine Standard | Serverless VPC Access Connector |
| App Engine Flex | 直接透過 VPC |
常見使用場景
1. Session 快取
import redis
r = redis.Redis(host='MEMORYSTORE_HOST', port=6379)
# 儲存 Session(30 分鐘過期)
r.setex(f"session:{session_id}", 1800, session_data)
# 讀取 Session
session = r.get(f"session:{session_id}")
2. 資料庫查詢快取
def get_user(user_id):
# 先查快取
cached = r.get(f"user:{user_id}")
if cached:
return json.loads(cached)
# 快取未命中,查資料庫
user = db.query("SELECT * FROM users WHERE id = %s", (user_id,))
# 寫入快取(5 分鐘過期)
r.setex(f"user:{user_id}", 300, json.dumps(user))
return user
3. 遊戲排行榜
# 使用 Redis Sorted Set
r.zadd("leaderboard", {"player_a": 1500, "player_b": 2300})
# 取得前 10 名
top_10 = r.zrevrange("leaderboard", 0, 9, withscores=True)
4. API 速率限制
def check_rate_limit(api_key, limit=100, window=60):
key = f"rate:{api_key}"
current = r.incr(key)
if current == 1:
r.expire(key, window)
return current <= limit
Redis vs Valkey vs Memcached 選型
| 特性 | Redis(獨立) | Valkey(叢集) | Memcached |
|---|---|---|---|
| 資料結構 | String、List、Set、Hash、Stream 等 | 同左 | 僅 Key-Value |
| 持久化 | RDB 快照 | RDB + AOF | 無 |
| 高可用 | Standard Tier 99.9% | 99.99%(多區域) | 無 |
| 最大容量 | 300 GB | 14.5 TB | 5 TB |
| 最大吞吐 | 16 Gbps(單實例) | 10M+ ops/sec | 依節點數 |
| Pub/Sub | 支援 | 支援 | 不支援 |
| 向量搜尋 | 不支援 | 支援 | 不支援 |
| 狀態 | GA | GA(推薦) | 已棄用 |
選型公式
新專案需要記憶體快取?
→ Memorystore for Valkey ✅(Google 推薦)
既有 Redis 應用、不想改架構?
→ Memorystore for Redis ✅
需要 >300 GB 或 99.99% SLA?
→ Memorystore for Valkey(叢集模式)✅
僅需簡單 Key-Value 快取、不需持久化?
→ 仍建議 Valkey ✅(Memcached 已棄用)
GenAI 向量搜尋?
→ Memorystore for Valkey ✅(內建向量搜尋)
定價
Redis 獨立實例(us-central1 參考)
| 等級 | Basic Tier(每 GiB/hr) | Standard Tier(每 GiB/hr) |
|---|---|---|
| M1(1-4 GB) | ~$0.049 | ~$0.064 |
| M2(5-10 GB) | ~$0.027 | ~$0.046 |
| M3(11-35 GB) | 低於 M2 | ~$0.046 |
Standard Tier 大概比 Basic Tier 貴 30-50%,畢竟多了複製和 HA 的開銷。
Valkey / Redis Cluster(us-central1 參考)
| 節點類型 | 每節點每小時 |
|---|---|
| shared-core-nano | ~$0.037 |
| highmem-medium | ~$0.192 |
| highmem-xlarge | ~$0.994 |
範例:5 分片 × 1 副本 × highmem-medium = 10 節點 × $0.192 = $1.92 / 小時(~$1,383 / 月)
成本優化
- 承諾使用折扣(CUD):1 年約 20%、3 年約 40%
- 沒有免費層(但有 GCP $300 免費試用額度)
效能調校建議
- 記憶體使用率 < 70%——超過會影響延遲
- maxmemory-gb 設為容量的 80%——預留快照 fork 開銷
- 使用 I/O Thread——M3 以上搭配 Redis 6.x+ 自動啟用
- 選擇同區域的 VPC——減少網路跳數
- 使用 Pipeline / Batch——減少 Round-Trip 次數
ACE 考試重點整理
必背知識點
- Memorystore 是全託管記憶體資料庫,支援 Redis、Valkey、Memcached
- Valkey 是 Redis 開源分支(Linux Foundation),Google 推薦新專案使用
- Basic Tier 無 SLA,Standard Tier 99.9%,Valkey 多區域 99.99%
- 只有私有 IP——Cloud Run / Cloud Functions 需要 VPC Connector
- Memcached 已棄用(2029/1/31 停止服務)
- Basic 和 Standard 無法互相升級,必須重建
- RDB 快照匯入會中斷服務
常見陷阱題
Q:Web App 需要毫秒以下的 Session 快取,選什麼? A:Memorystore(for Redis 或 Valkey)。記憶體資料庫提供微秒級延遲。
Q:Memorystore 實例可以從公開網路存取嗎? A:不行。Memorystore 只有私有 IP,必須透過 VPC 存取。Cloud Run 等 Serverless 服務需要設定 VPC Connector。
Q:需要 >300 GB 的記憶體快取並且要 99.99% SLA,選什麼? A:Memorystore for Valkey(叢集模式)。最大 14.5 TB、250 節點、多區域 99.99% SLA。
Q:Redis 和 Memcached 有什麼差別? A:Redis/Valkey 支援豐富資料結構(List、Set、Hash 等)和持久化。Memcached 只支援簡單 Key-Value 且無持久化。Google 已棄用 Memcached,建議用 Valkey。
Q:什麼是 Valkey? A:Redis 在 2024 年更改授權後的開源分支,由 Linux Foundation 主導,與 Redis 完全協議相容。
總結
Cloud Memorystore 就是 GCP 的全託管記憶體資料庫,幾個重點:
- 定位:微秒級延遲的記憶體快取,適合 Session、排行榜、速率限制
- 推薦:新專案用 Valkey(Redis 開源分支,效能更高)
- SLA:Basic 無 SLA → Standard 99.9% → Valkey 多區域 99.99%
- 網路:僅私有 IP,Serverless 服務需 VPC Connector
- Memcached 已棄用:2029/1/31 停止服務,遷移到 Valkey
- 選型:需要快取 → Memorystore;需要持久化 NoSQL → Firestore;需要 SQL → Cloud SQL
下一課 ACE-216:混合雲連線深度解析,來看企業混合架構會用到的核心網路技術。