使用 Memcache

本頁說明如何使用 Google Cloud 控制台設定及監控應用程式的 Memcache 服務。另外,本頁也會說明如何使用 App Engine Memcache Python API 設定並擷取快取值,以及如何使用比較與設定功能,處理對同一個 Memcache 索引鍵的並行寫入要求。如要進一步瞭解 Memcache,請參閱 Memcache 總覽

設定 Memcache

  1. 前往 Google Cloud 控制台的「Memcache」頁面。
    前往「Memcache」頁面
  2. 選取您要使用的 Memcache 服務層級:

    • 「共用」(預設):免費的服務層級,提供最理想的快取容量。
    • 「專屬」:依 GB 時數快取量收費,為應用程式指派專屬的固定快取容量。

    進一步瞭解 Memcache 總覽中可用的服務類別。

快取及擷取值

對值進行快取

使用 add() 新增鍵值 (僅限鍵不含任何值的情況),並加上選用的到期時間:

memcache.add(key="[KEY]", value="[VALUE]", time=[EXPIRATION_TIME])

舉例來說,如要將值 raining 新增至鍵 weather_USA_98105,並設定從寫入值起算的一小時為效期,請執行以下指令:

memcache.add(key="weather_USA_98105", value="raining", time=3600)

如要進一步瞭解 add() 和其他用來設定值的方法,請參閱 memcache Python API 說明文件

參閱 Memcache 範例中有關對值進行快取的其他範例。

查詢快取的值

使用 get() 查詢單一鍵的值:

memcache.get(key="[KEY]")

舉例來說,如要取得 weather_USA_98105 鍵的值,請執行以下操作:

memcache.get(key="weather_USA_98105")

如要進一步瞭解 get() 和其他如何查詢值的方法,請參閱 Memcache Python API 說明文件

在 Google Cloud 主控台中監控 Memcache

  1. 前往 Google Cloud 控制台的「Memcache」頁面。
    前往「Memcache」頁面
  2. 查看下列報表:
    • Memcache 服務等級:顯示應用程式使用的是共用或專屬服務等級。如果您是專案的擁有者,則可以在兩個服務等級之間切換。進一步瞭解服務等級
    • 命中率:顯示從快取提供的資料要求百分比,以及從快取提供的資料要求原始數字。
    • 快取的項目
    • 「Oldest item age」(最舊項目時間長度):最舊快取項目已存在的時間。請注意,項目的存在時間長度會在每次使用 (無論是讀取或寫入) 項目時重設。
    • 「Total cache size」(總快取大小)
  3. 您可以採取下列任何動作:

    • 新增鍵:將新的鍵新增至快取。
    • 尋找鍵:擷取現有鍵。
    • 清除快取:從快取中移除所有鍵/值組合。
  4. (僅限專屬 Memcache) 查詢「熱門鍵」清單。

    • 「熱門鍵」是指 Memcache 中每秒查詢次數 (QPS) 超過 100 的鍵。
    • 此清單最多可包含 100 個熱門鍵,依照 QPS 由高至低排序。

處理並行寫入

若要使用比較與設定功能,處理寫入至同一個 Memcache 索引鍵的多個要求:

  1. 將 Memcache Client 物件實例化。
  2. 使用重試循環 (最好設定重試次數上限並使用指數輪詢)
    1. 在重試循環中,使用 gets()get_multi() 取得索引鍵,並將 for_cas 參數設為 True
    2. 在重試迴圈中,使用 cas()cas_multi() 更新索引鍵值。

下列程式碼片段示範如何使用比較與設定功能:

def bump_counter(key):
   client = memcache.Client()
   while True: # Retry loop
     counter = client.gets(key)
     if counter is None: raise KeyError('Uninitialized counter')
     if client.cas(key, counter+1):
        break

重試循環有其必要,因為如果沒有循環,程式碼僅會偵測競爭狀況而不會實際避開。當 memcache 服務用於此處顯示的模式 (也就是使用 gets()cas()) 時,如果有兩個 (或更多) 不同的用戶端例項同時發生競爭狀態,只有第一個執行 cas() 作業的例項會成功 (傳回 True),而第二個 (和後續的) 例項會失敗 (傳回 False)。

您可以修正這段程式碼中的重試次數上限,以避免在最糟糕的情況下,同一個計數器受到大量爭用時出現無限循環的情形。舉例來說,如果嘗試更新計數器的要求數超過 Memcache 服務能夠即時處理的數量,就會發生這類爭用狀況。

如要進一步瞭解比較與設定功能的資訊,請參閱 Memcache 總覽

後續步驟