Utilizzo di memcache

Questa pagina descrive come configurare e monitorare il servizio memcache per la tua applicazione utilizzando la Google Cloud console. Descrive anche come utilizzare l'API Python di memcache di App Engine per impostare e recuperare i valori memorizzati nella cache e utilizzare la funzionalità di confronto e impostazione per gestire le richieste di scrittura simultanee alla stessa chiave memcache. Per scoprire di più su memcache, consulta la Panoramica di memcache.

Configurare memcache

  1. Vai alla pagina Memcache nella Google Cloud console.
    Vai alla pagina Memcache
  2. Seleziona il livello di servizio memcache che vuoi utilizzare:
    • Condiviso (impostazione predefinita): è senza costi e fornisce capacità della cache al meglio delle possibilità.
    • Dedicato : la fatturazione avviene in base alle GB-ore di dimensione della cache e fornisce una capacità della cache fissa assegnata esclusivamente alla tua applicazione.

Scopri di più sulle classi di servizi disponibili nella Panoramica di memcache.

Memorizzare nella cache e recuperare i valori

Memorizzare un valore nella cache

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

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 dal momento in cui viene scritto il valore:

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

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

Vedi altri esempi di memorizzazione nella cache dei valori in Esempi di Memcache.

Cercare i 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 altri metodi per cercare i valori nella documentazione dell'API Python di memcache.

Monitorare memcache nella Google Cloud console

  1. Vai alla pagina Memcache nella Google Cloud console.
    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 il proprietario del progetto, puoi passare da uno all'altro. Scopri di più sui livelli di servizio.
    • Percentuale di hit: mostra la percentuale di richieste di dati gestite da la cache, nonché il numero di richieste di dati gestite dalla cache.
    • Elementi nella cache.
    • Età elemento più vecchio: l'età dell'elemento memorizzato nella cache meno recente. Tieni presente che l'età di un elemento viene reimpostata ogni volta che viene utilizzato, in lettura o in scrittura.
    • Dimensione cache totale.
  3. Puoi eseguire una 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 dedicato) Esamina l'elenco delle chiavi attive.

    • Le "chiavi attive" sono chiavi che ricevono più di 100 query al secondo (QPS) in memcache.
    • Questo elenco include fino a 100 chiavi attive, ordinate in base al QPS più alto.

Gestire le scritture simultanee

Per utilizzare la funzionalità di confronto e impostazione per gestire le scritture da più richieste alla stessa chiave memcache:

  1. Crea un'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. All'interno del loop di nuovi tentativi, recupera la chiave utilizzando gets() o get_multi() con il parametro for_cas impostato su True.
    2. All'interno del loop di nuovi tentativi, aggiorna il valore della chiave utilizzando cas() o cas_multi().

Il seguente snippet 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 di nuovi tentativi è necessario perché senza il loop questo codice non evita effettivamente le condizioni di race, ma le rileva soltanto. Il servizio memcache garantisce che, se utilizzato nel pattern mostrato qui (ovvero utilizzando gets() e cas()), se due (o più) istanze client diverse sono coinvolte in una condizione di race, solo la prima a eseguire l'operazione cas() ha esito positivo (restituisce True), mentre la seconda (e le successive) ha esito negativo (restituisce False).

Un altro perfezionamento che dovresti aggiungere a questo codice campione è impostare un limite al numero di nuovi tentativi, per evitare un loop infinito negli scenari peggiori in cui è presente una grande contesa per lo stesso contatore. Un esempio di quando potrebbe verificarsi una contesa di questo tipo è se ci sono più richieste che tentano di aggiornare il contatore rispetto a quelle che il servizio memcache può elaborare in tempo reale.

Scopri di più su confronto e impostazione nella Panoramica di memcache.

Passaggi successivi