使用 Memcache

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

設定 Memcache

  1. 前往 Google Cloud Platform 主控台的「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 Platform 主控台監控 Memcache

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

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

    • 「熱門鍵」是指 Memcache 中每秒查詢次數 (QPS) 超過 100 的鍵。
    • 此清單最多可包含 100 個熱門鍵,依照 QPS 由高至低排序。
    • 請參閱 App Engine Memcache 最佳做法一文中的提示,瞭解如何將負載更加平均地分配至整個鍵空間。

處理並行寫入

若要使用比較與設定功能,處理寫入至同一個 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 總覽

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Python 2 適用的 App Engine 標準環境