使用 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 service level」(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 總覽

後續步驟

  • 如要進一步瞭解 Memcache,請參閱 Memcache 總覽
  • 參閱 Memcache 範例,瞭解如何在 Python 中使用 Memcache 的程式碼範例。