

# PERF03-BP05 實作利用快取的資料存取模式
<a name="perf_data_access_patterns_caching"></a>

 實作可受益於快取資料的存取模式，以便快速擷取經常存取的資料。

 **常見的反模式：**
+  快取頻繁變更的資料。
+  您依賴快取資料，就好像它是持久存儲並始終可用一樣。
+  您不考慮快取資料的一致性。
+  您不監控快取實作的效率。

 **建立此最佳實務的優勢：**將資料儲存在快取中可改善讀取延遲、讀取輸送量、使用者體驗和整體效率，並降低成本。

 **未建立此最佳實務時的風險暴露等級：**中 

## 實作指引
<a name="implementation-guidance"></a>

 快取是旨在存儲資料的軟體或硬體組件，以便更快或更有效地滿足未來對相同資料的請求。如果存儲在快取中的資料丟失，可以透過重複之前的計算或從另一個資料存放區中擷取來進行重建。

 資料快取可能是改善整體應用程式效能並減輕基礎主要資料來源負擔的最有效策略之一。可以在應用程式的多個層級快取資料，例如在進行遠端呼叫的應用程式內 (稱為*用戶端快取*)，或使用快速次要服務來儲存資料 (稱為*遠端快取*)。

 **用戶端快取** 

 透過用戶端快取，每個用戶端 (查詢後端資料儲存的應用程式或服務) 都可以在指定的時間內，在本機儲存其唯一查詢的結果。這可以先檢查本機用戶端快取，來減少網路對資料存放區的請求數量。如果結果不存在，應用程式便可查詢資料存放區，並將這些結果儲存在本機。此模式允許每個用戶端將資料儲存在最接近的位置 (用戶端本身)，從而達到最低的延遲。當後端資料存放區無法使用時，用戶端也可以繼續提供某些查詢，從而提高整體系統的可用性。

 這種方法的一個缺點是，當涉及多個用戶端時，它們可能會在本地存儲相同的快取資料。這會導致這些用戶端之間的重複儲存用量和資料不一致。一個用戶端可能會快取查詢結果，一分鐘後，另一個用戶端可以執行相同查詢並獲得不同結果。

 **遠端快取** 

 為了解決用戶端之間的重複資料問題，可以使用快速外部服務或*遠端緩存*來存儲查詢的資料。每個用戶端都會在查詢後端資料存放區之前檢查遠端快取，而非檢查本機資料存放區。此策略可實現用戶端之間更一致的回應、更好的儲存資料效率以及更高的快取資料量，因為儲存空間會獨立於用戶端進行擴展。

 遠端快取的缺點是整個系統可能會遇到較高延遲，因為需要額外的網路跳轉來檢查遠端快取。用戶端快取可以與遠端快取一起用於多層級快取，以改善延遲。

### 實作步驟
<a name="implementation-steps"></a>
+  識別可受益於快取的資料庫、API 和網路服務。具有大量讀取工作負載、高讀寫比率或擴展成本較高的服務都是快取的候選者。
  +  [資料庫快取](https://aws.amazon.com/caching/database-caching/) 
  +  [啟用 API 快取以提升回應能力](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html) 
+  找出最適合您的存取模式的適當快取策略類型。
  +  [快取策略](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Strategies.html) 
  +  [AWS 快取解決方案](https://aws.amazon.com/caching/aws-caching/) 
+  遵循資料存放區的[快取最佳實務](https://aws.amazon.com/caching/best-practices/)。
+  為所有資料設定快取失效策略，例如存留時間 (TTL)，以平衡資料新鮮度並降低後端資料存放區壓力。
+  在用戶端中啟用自動連線重試、指數退避、用戶端逾時和連線集區等功能 (如果可用)，因為它們可以改善效能和可靠性。
  +  [最佳實務：Redis 用戶端和 Amazon ElastiCache (Redis OSS)](https://aws.amazon.com/blogs/database/best-practices-redis-clients-and-amazon-elasticache-for-redis/) 
+  監控快取命中率，目標為 80% 或更高。較低的值可能表示快取大小不足，或者無法從快取中受益的存取模式。
  +  [應監控哪些指標？](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheMetrics.WhichShouldIMonitor.html) 
  +  [在 Amazon ElastiCache 上監控 Redis 工作負載的最佳實務](https://www.youtube.com/watch?v=c-hTMLN35BY) 
  +  [使用 Amazon CloudWatch 搭配 Amazon ElastiCache (Redis OSS) 進行監控的最佳實務](https://aws.amazon.com/blogs/database/monitoring-best-practices-with-amazon-elasticache-for-redis-using-amazon-cloudwatch/) 
+  實作[資料複寫](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Replication.Redis.Groups.html)，將讀取卸載至多個執行個體，並提高資料讀取效能和可用性。

## 資源
<a name="resources"></a>

 **相關文件：**
+  [使用 Amazon ElastiCache Well-Architected Lens](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/WellArchitechtedLens.html) 
+  [使用 Amazon CloudWatch 搭配 Amazon ElastiCache (Redis OSS) 進行監控的最佳實務](https://aws.amazon.com/blogs/database/monitoring-best-practices-with-amazon-elasticache-for-redis-using-amazon-cloudwatch/) 
+  [應監控哪些指標？](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheMetrics.WhichShouldIMonitor.html) 
+  [《利用 Amazon ElastiCache 大規模提高效能》白皮書](https://docs.aws.amazon.com/whitepapers/latest/scale-performance-elasticache/scale-performance-elasticache.html) 
+  [快取挑戰和策略](https://aws.amazon.com/builders-library/caching-challenges-and-strategies/) 

 **相關影片：**
+  [Amazon ElastiCache 學習路徑](https://pages.awscloud.com/GLB-WBNR-AWS-OTT-2021_LP_0003-DAT_AmazonElastiCache.html) 
+  [使用 Amazon ElastiCache 最佳實務打造邁向成功的設計](https://youtu.be/_4SkEy6r-C4) 
+ [AWS re:Invent 2020 - 使用 Amazon ElastiCache 最佳實務打造邁向成功的設計](https://www.youtube.com/watch?v=_4SkEy6r-C4)
+ [AWS re:Invent 2023 - [發佈] Amazon ElastiCache 無伺服器簡介](https://www.youtube.com/watch?v=YYStP97pbXo)
+ [AWS re:Invent 2022 - 使用 Redis 重塑資料層級的 5 個好方法](https://www.youtube.com/watch?v=CD1kvauvKII)
+ [AWS re:Invent 2021 - 深入了解 Amazon ElastiCache (Redis OSS)](https://www.youtube.com/watch?v=QEKDpToureQ)

 **相關範例：**
+  [使用 Amazon ElastiCache (Redis OSS) 提升 MySQL 資料庫效能](https://aws.amazon.com/getting-started/hands-on/boosting-mysql-database-performance-with-amazon-elasticache-for-redis/) 