Memcache verwenden

Auf dieser Seite wird beschrieben, wie Sie den Memcache-Dienst für Ihre Anwendung mit der Google Cloud Console konfigurieren und überwachen. Außerdem wird erläutert, wie Sie mit der App Engine Memcache Python API im Cache gespeicherte Werte festlegen und abrufen können und wie Sie mithilfe der Funktion Compare-and-Set gleichzeitige Schreibanforderungen für denselben Memcache-Schlüssel verarbeiten. Weitere Informationen zu Memcache finden Sie in der Memcache-Übersicht.

Memcache konfigurieren

  1. Rufen Sie die Memcache-Seite in der Google Cloud Console auf.
    Zur Seite „Memcache“
  2. Wählen Sie das gewünschte Memcache-Service-Level aus:

    • Freigegeben (Standard): Kostenlos, bietet Cache-Kapazität auf Best-Effort-Basis.
    • Dediziert: Kostenpflichtig, die Abrechnung erfolgt nach Cache-Größe in GB/Stunden. Eine feste Cache-Kapazität steht exklusiv für Ihre Anwendung zur Verfügung.

    Weitere Informationen zu verfügbaren Dienstklassen finden Sie in der Übersicht über Memcache.

Werte im Cache speichern und abrufen

Werte zwischenspeichern

Verwenden Sie add(), um einen Schlüsselwert mit einer optionalen Ablaufzeit hinzuzufügen, sofern noch keiner vorhanden ist:

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

So fügen Sie beispielsweise den Wert raining zum Schlüssel weather_USA_98105 mit einer Ablaufzeit von einer Stunde nach dem Schreiben des Werts hinzu:

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

Weitere Informationen zu add() und anderen Methoden zum Festlegen von Werten finden Sie in der Dokumentation zur Memcache Python API.

Weitere Beispiele für das Speichern von Werten im Cache finden Sie in den Memcache-Beispielen.

Zwischengespeicherte Werte suchen

Verwenden Sie get() zum Aufrufen des Werts eines einzelnen Schlüssels:

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

So rufen Sie beispielsweise den Wert des Schlüssels weather_USA_98105 ab:

memcache.get(key="weather_USA_98105")

Weitere Informationen zu get() und anderen Methoden zum Ermitteln von Werten finden Sie in der Dokumentation zur Memcache Python API.

Memcache in der Google Cloud Console überwachen

  1. Rufen Sie die Memcache-Seite in der Google Cloud Console auf.
    Zur Seite „Memcache“
  2. Sehen Sie sich die folgenden Berichte an:
    • Memcache-Service-Level: Gibt an, ob Ihre Anwendung das Service Level „Freigegeben“ oder „Dediziert“ verwendet. Wenn Sie der Inhaber des Projekts sind, können Sie zwischen den beiden Service-Levels wechseln. Weitere Informationen über die Service Levels
    • Trefferquote: Gibt den Prozentsatz der Datenanfragen an, die aus dem Cache bereitgestellt wurden, sowie die reine Anzahl der Datenanfragen, die aus dem Cache bereitgestellt wurde.
    • Elemente im Cache
    • Alter des ältesten Elements: Das Alter des ältesten Elements im Cache. Das Alter eines Elements wird bei jedem daran ausgeführten Lese- oder Schreibvorgang zurückgesetzt.
    • Gesamtgröße des Cache
  3. Sie können eine der folgenden Aktionen ausführen:

    • Neuer Schlüssel: Fügen Sie dem Cache einen neuen Schlüssel hinzu.
    • Schlüssel suchen: Rufen Sie einen vorhandenen Schlüssel ab.
    • Cache leeren: Entfernen Sie alle Schlüssel/Wert-Paare aus dem Cache.
  4. (Nur dediziertes Memcache-Service-Level) Gehen Sie die Liste der Hot-Schlüssel durch.

    • „Hot-Schlüssel“ sind Schlüssel, die im Memcache mehr als 100 Abfragen pro Sekunde erhalten.
    • Diese Liste enthält bis zu 100 Hot-Schlüssel, sortiert nach der höchsten Abfrage pro Sekunde.

Gleichzeitige Schreibvorgänge verwalten

So verwenden Sie die Funktion Compare-and-Set, um Schreibvorgänge von mehreren Anfragen auf denselben Memcache-Schlüssel zu verarbeiten:

  1. Instanziieren Sie ein Memcache-Client-Objekt.
  2. Verwenden Sie eine Wiederholungsschleife (vorzugsweise mit einem Limit für die Anzahl der Wiederholungen und unter Verwendung von exponentiellem Backoff)
    1. Rufen Sie in der Wiederholungsschleife den Schlüssel mit gets() oder get_multi() ab, wobei der Parameter for_cas auf True gesetzt ist.
    2. Aktualisieren Sie innerhalb der Wiederholungsschleife den Schlüsselwert mit cas() oder cas_multi().

Das folgende Snippet zeigt eine Möglichkeit, die Funktion Compare-and-Set zu verwenden:

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

Die Wiederholungsschleife ist notwendig, da dieser Code ohne die Schleife Race-Bedingungen nicht wirklich vermeidet, sondern diese nur erkennt! Der Memcache-Dienst garantiert, dass bei der Verwendung des hier gezeigten Musters (Verwendung von gets() und cas()) bei zwei oder mehr Clientinstanzen, die an einer Race-Bedingung beteiligt sind, nur der erste cas()-Vorgang erfolgreich ausgeführt wird (und True zurückgibt), während der zweite Vorgang und nachfolgende Vorgänge fehlschlagen (und False zurückgeben).

Zur Optimierung des Beispielcodes sollten Sie die Anzahl der Wiederholungen begrenzen, um bei vielen Konflikten für denselben Zähler als Worst-Case-Szenario eine Endlosschleife zu vermeiden. Beispielsweise können solche Konflikte auftreten, wenn mehr Anfragen versuchen, den Zähler zu aktualisieren, als der Memcache-Dienst in Echtzeit verarbeiten kann.

Weitere Informationen zu Compare-and-Set finden Sie in der Memcache-Übersicht

Weitere Informationen