Memorystore for Redis 的最佳做法

本頁面提供 Memorystore for Redis 的最佳使用指南。這個頁面也會指出應避免的潛在問題。

如需疑難排解情境清單,請參閱「疑難排解」。

匯出 RDB

匯出 RDB 備份時,請參閱下列指南:

需要大量資源的作業

對於標準級 Redis 執行個體,下列作業會在作業期間使用額外記憶體:

由於複製作業,版本升級、資源調度和手動容錯移轉會使用額外記憶體 (適用於標準級執行個體)。這些作業會遵循「標準層級執行個體升級行為」一節所述的複製程序。

由於匯入和匯出作業會產生 Redis 分支程序,並與這些作業相關聯的寫入時複製資料管理機制,因此需要額外記憶體。

為減輕耗用大量資源的作業所造成的缺點,您應:

需要重試連線的作業和情境

下列作業和情境會中斷網路與 Redis 執行個體之間的網路連線:

這些作業會修改執行個體,因此需要暫時中斷連線。 執行這些作業前,請務必採用指數輪詢重試邏輯,確保應用程式會自動重新連線並繼續正常運作。

例行維護

Memorystore for Redis 執行個體會定期進行維護。詳情請參閱 Memorystore for Redis 的維護政策

請採用下列最佳做法,為例行維護做好準備:

  • 設定維護期間,指定維護更新的執行時間。
    • 將維護期間排定在執行個體流量較低且記憶體負荷充足的時段。詳情請參閱「維護更新的影響」。
  • 開啟維護期間通知 ,在維護作業即將開始時收到提醒。
  • 採用指數輪詢的重試邏輯
  • 對於 Standard 層級執行個體,您可以透過手動容錯移轉模擬維護事件,瞭解維護作業造成的容錯移轉對應用程式的影響。
  • 對於基本層級執行個體,您可以暫時調度執行個體,將大小調大,模擬維護更新的影響。觀察影響後,即可縮減回原始大小。

記憶體管理

由於開放原始碼 Redis 會發生眾所周知的記憶體片段化問題,因此記憶體管理可能是一項挑戰。建議您降低執行個體的maxmemory 設定,以便在記憶體壓力過大時提供額外資源。

如要監控 Memorystore 執行個體的記憶體壓力,最佳方式是使用「系統記憶體用量比率」指標。如需 Memorystore for Redis 記憶體管理詳細指南,請參閱記憶體管理最佳做法

管理閒置連線

如果連線未正確終止,一段時間後,您可能會發現連線至 Memorystore 執行個體的連線數增加。這可能會對效能造成負面影響,尤其是在使用傳輸加密時,因為這會根據容量層級設定最大連線數限制。為減輕這類情況的影響,建議您使用 timeout Redis 設定參數,設定閒置用戶端連線自動終止前的秒數。

資料存取透明化控管機制資源名稱

請勿在 Memorystore for Redis 資源名稱中儲存機密資料。資源名稱是指 Memorystore for Redis 執行個體名稱,以及執行個體中繼資料 (例如標記)。資源名稱中儲存的資料不一定會受到 Google Cloud 資料存取透明化控管機制保護,且可能與貴機構的資料存取透明化控管機制法規遵循規定衝突。

部分無伺服器環境需要無伺服器 VPC 存取連接器

部分無伺服器環境需要 Serverless VPC Access 連接器,才能連線至 Memorystore for Redis。如要透過上述任一環境連線,請為專案設定無伺服器 VPC 存取連接器。

網路

建議使用私人服務存取 連線模式。 Memorystore for Redis 使用兩種連線模式:私人服務存取權和直接對等互連。私人服務存取連線模式可簡化 IP 範圍管理作業,並允許您視需要使用共用虛擬私有雲。

建立執行個體後,就無法變更連線模式。

詳情請參閱「網路」。

監控與快訊

建議使用監控快訊,因為這些功能會提供 Redis 執行個體記憶體用量的關鍵信號。您也可以藉此深入瞭解 Redis 執行個體回應傳入快取要求的效率。

建議您設定下列預設快訊:

CPU 使用率最佳做法

不當使用耗用資源的 Redis 指令會導致延遲時間長、無回應或連線發生問題。標準級執行個體可在災難復原期間提供高可用性,並依賴主要節點和備用節點之間的非同步複製功能。如果其中一個節點的指令處理作業耗費大量資源,導致 Redis 主執行緒遭到封鎖,複製作業可能會受到影響。如果問題持續發生,且發生位置中斷,則中斷位置中寫入的最新資料可能無法在其他位置使用。

建議您使用 Cloud Monitoring 為「Main Thread CPU Seconds」(主執行緒 CPU 秒數) (redis.googleapis.com/stats/cpu_utilization_main_thread) 指標設定快訊,確保 CPU 使用率不會超過主要節點的 0.8 秒,或每個副本節點的 0.5 秒 (副本指定為唯讀副本時)。

如果 Redis 執行個體超出建議值,建議您將執行個體擴展至較高的容量層級,或按照疑難排解說明操作,避免 CPU 密集型作業。

耗用大量資源的指令

強烈建議您避免使用耗用大量資源的 Redis 指令。使用這些指令可能會導致下列效能問題:

  • 延遲時間長和用戶端逾時
  • 因增加記憶體用量的指令而導致記憶體壓力
  • 節點複製和同步處理期間發生資料遺失,因為 Redis 主執行緒遭到封鎖
  • 健康狀態檢查資源不足、可觀測性和複製

下表列出耗用大量資源的 Redis 指令示例,並提供可有效運用資源的替代方案。

類別 耗用大量資源的指令 資源效率較高的替代方案
針對整個鍵空間執行 KEYS SCAN
針對可變長度鍵集執行 LRANGE 限制查詢所用範圍的大小。
ZRANGE 限制查詢所用範圍的大小。
HGETALL HSCAN
SMEMBERS SSCAN
封鎖指令碼執行作業 EVAL 確認指令碼不會無限期執行。
EVALSHA 確認指令碼不會無限期執行。
移除檔案和連結 DELETE UNLINK
發布及訂閱 PUBLISH SPUBLISH
SUBSCRIBE SSUBSCRIBE