Utilizzo di memcache

In questa pagina viene descritto come configurare e monitorare il servizio memcache per la tua applicazione utilizzando la console Google Cloud. Descrive inoltre come utilizzare l'API Python memcache di App Engine per impostare e recuperare i valori memorizzati nella cache e utilizzare la funzionalità di confronto e impostazione per gestire richieste di scrittura simultanee alla stessa chiave memcache. Per scoprire di più su memcache, leggi la panoramica di Memcache.

Configurazione di memcache

  1. Vai alla pagina memcache nella console Google Cloud.
    Vai alla pagina memcache
  2. Seleziona il livello di servizio memcache che vuoi utilizzare:

    • Condivisa (predefinita): gratuita e fornisce capacità della cache secondo il criterio del "best effort".
    • Dedicata: i costi sono fatturati in base ai GB/ora di dimensione della cache e forniscono una capacità della cache fissa assegnata esclusivamente alla tua applicazione.

    Scopri di più sulle classi di servizio disponibili in Memcache Overview.

Memorizzazione nella cache e recupero dei valori

Memorizzazione nella cache di un valore

Utilizza add() per aggiungere un valore di una chiave se e solo se non esiste già, con una data di scadenza facoltativa:

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

Ad esempio, per aggiungere il valore raining alla chiave weather_USA_98105 con un tempo di scadenza di un'ora dalla scrittura del valore:

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

Scopri di più su add() e su altri metodi per impostare i valori nella documentazione relativa all'API Python Memcache.

Consulta altri esempi di valori di memorizzazione nella cache in Esempi di Memcache.

Ricerca di valori memorizzati nella cache

Utilizza get() per cercare il valore di una singola chiave:

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

Ad esempio, per ottenere il valore della chiave weather_USA_98105:

memcache.get(key="weather_USA_98105")

Scopri di più su get() e su altri metodi per la ricerca di valori nella documentazione relativa all'API Python Memcache.

Monitoraggio della memcache nella console Google Cloud

  1. Vai alla pagina memcache nella console Google Cloud.
    Vai alla pagina memcache
  2. Esamina i seguenti report:
    • Livello di servizio Memcache: indica se la tua applicazione utilizza il livello di servizio Condiviso o Dedicato. Se sei un proprietario del progetto, puoi passare da una all'altra. Scopri di più sui livelli di servizio.
    • Rapporto hit: mostra la percentuale di richieste di dati inviate dalla cache, nonché il numero non elaborato di richieste di dati inviate dalla cache.
    • Elementi nella cache.
    • Età elemento meno recente: l'età dell'elemento meno recente memorizzato nella cache. Tieni presente che l'età di un elemento viene reimpostata ogni volta che viene utilizzato, in lettura o in scrittura.
    • Dimensioni totali della cache.
  3. Puoi eseguire una qualsiasi delle seguenti azioni:

    • Nuova chiave: aggiungi una nuova chiave alla cache.
    • Trova una chiave: recupera una chiave esistente.
    • Svuota cache: rimuovi tutte le coppie chiave-valore dalla cache.
  4. (Solo memcache dedicata) Consulta l'elenco delle Chiavi rapide.

    • Le "chiavi attive" sono chiavi che ricevono più di 100 query al secondo (QPS) nella memcache.
    • Questo elenco include fino a 100 tasti di scelta rapida, ordinati in base al valore QPS più elevato.

Gestione di scritture simultanee

Per utilizzare la funzionalità Confronta e imposta per gestire le scritture da più richieste alla stessa chiave memcache:

  1. Crea l'istanza di un oggetto Client memcache.
  2. Utilizza un loop di nuovi tentativi (preferibilmente con un limite al numero di nuovi tentativi e utilizzando il backoff esponenziale)
    1. Nel loop per i tentativi, recupera la chiave utilizzando gets() o get_multi() con il parametro for_cas impostato su True.
    2. Nel loop di nuovi tentativi, aggiorna il valore della chiave utilizzando cas() o cas_multi().

Lo snippet seguente mostra un modo per utilizzare la funzionalità di confronto e impostazione:

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

Il loop per la ripetizione è necessario perché senza il loop questo codice in realtà non evita le condizioni di gara, ma le rileva. Il servizio memcache garantisce che, quando utilizzato nel pattern mostrato qui (ovvero usando gets() e cas()), se due (o più) diverse istanze client sono coinvolte in una condizione di gara, solo la prima che esegue l'operazione cas() ha esito positivo (restituzione True), mentre la seconda (e le successive) ha esito negativo (restituisce False).

Un altro perfezionamento da aggiungere a questo codice campione è l'impostazione di un limite per il numero di nuovi tentativi, per evitare un loop infinito negli scenari peggiori in cui vi è molta contesa per lo stesso contatore. Un esempio di quando può verificarsi questo tipo di contesa è la presenza di più richieste che tentano di aggiornare il contatore rispetto a quelle che il servizio Memcache può elaborare in tempo reale.

Scopri di più su confronti e impostazioni in Panoramica Memcache.

Passaggi successivi