Memcache の使用方法

このページでは、Google Cloud Platform Console を使用して、アプリケーション用に Memcache サービスを構成してモニタリングする方法を説明します。また、App Engine の Memcache Python API を使用して、キャッシュに保存された値を設定したり取得したりする方法、同じ Memcache キーに対する同時書き込みリクエストをコンペアアンドセット機能を使用して処理する方法についても説明します。Memcache については、Memcache の概要をご覧ください。

Memcache を構成する

  1. Google Cloud Platform Console で [Memcache] ページに移動します。
    [Memcache] ページに移動
  2. 使用する Memcache サービスレベルを選択します。

    • 共有(デフォルト) - 無料で、ベスト エフォート ベースでキャッシュ容量を提供します。
    • 専用 - キャッシュ サイズ使用量の GB 時間で請求され、アプリケーションに対して固定キャッシュ容量が独占的に割り当てられます。

    使用可能なサービスクラスについては、Memcache の概要をご覧ください。

値のキャッシュへの保存と取得

値をキャッシュに保存する

キーの値を追加するには add() を使用します。このメソッドでは、値がまだ存在しない場合にのみ追加されます。オプションで有効期限も設定できます。

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

たとえば、値 raining をキー weather_USA_98105 に追加し、値の有効期限を書き込み後 1 時間に設定するには、次のように指定します。

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 Console での Memcache のモニタリング

  1. Google Cloud Platform Console で [Memcache] ページに移動します。
    [Memcache] ページに移動
  2. 次のレポートを調べます。
    • Memcache サービスレベル: アプリケーションは共有または専用のどちらのサービスレベルを使用しているかを示します。プロジェクトのオーナーの場合は、2 つのサービスレベルを切り替えることができます。詳細については、サービスレベルをご覧ください。
    • ヒット率: Memcache のヒットとミスのパーセンテージと実数を示します。
    • キャッシュ内のアイテム
    • 最も古いアイテムの経過期間: 最も古いキャッシュされたアイテムの経過期間。アイテムの経過時間は使用(読み取りまたは書き込み)されるたびにリセットされます。
    • 総キャッシュ サイズ
  3. 次の操作を行うことができます。

    • 新しいキー: 新しいキーをキャッシュに追加します。
    • キーを検索: 既存のキーを取得します。
    • キャッシュをフラッシュ: キャッシュからすべてのキーと値のペアを削除します。
  4. (専用 Memcache のみ)ホットキーのリストを参照します。

    • 「ホットキー」は Memcache 内の 100 クエリ/秒(QPS)以上を受信するキーです。
    • このリストには QPS の高い順で並べ換えられた最大 100 個のホットキーが含まれます。
    • キー空間全体により均等に負荷を分散する方法のヒントについては、App Engine の Memcache のベスト プラクティスの記事をお読みください。

同時書き込みの処理

複数のリクエストによる同じ Memcache キーへの書き込みをコンペア アンド セット機能を使用して処理するには:

  1. Memcache の Client オブジェクトをインスタンス化します。
  2. 再試行ループを使用します(再試行回数を制限して指数バックオフを使用することをおすすめします)。
    1. 再試行ループ内で、gets() または get_multi() を使用してキーを取得します。for_cas パラメータは True に設定します。
    2. 再試行ループ内で、cas() または cas_multi() を使用してキーの値を更新します。

次のスニペットは、コンペア アンド セット機能を使用する方法の 1 つを示したものです。

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

このコードでは、必ず再試行ループを使用する必要があります。再試行ループを使用しないと競合状態を避けられず、検出しか行われません。この例で示した gets()cas() のようなパターンで複数の異なるクライアント インスタンスで競合状態が生じた場合に、Memcache サービスでは必ず、cas() オペレーションの最初の実行のみが成功し(True を返す)、それ以降は失敗(False を返す)として処理されます。

このサンプルコードにさらに改良を加えるとすれば、同じカウンタで多数の競合が生じるような最悪のシナリオで無限ループを回避できるように、再試行回数の制限を設定することが考えられます。このような競合は、カウンタの更新を試行するリクエストの数が Memcache サービスがリアルタイムで処理できる数を超えた場合などに発生する可能性があります。

コンペア アンド セットの詳細については、Memcache の概要をご覧ください。

次のステップ

  • Memcache について詳しくは、Memcache の概要をご覧ください。
  • Memcache を使用した Python のコード例については、Memcache の例をご覧ください。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python の App Engine スタンダード環境