2012-06-27 9 views
6

Dal wiki memcached:Come vengono sostituiti i dati nella memcached quando è piena e le prestazioni di memcache?

Quando il tavolo è pieno, inserti successivi causano dati precedenti per essere eliminati in almeno recentemente usati (LRU) ordine.

Ho le seguenti domande:

  1. Quali dati saranno eliminati? Quello che è più vecchio per inserimento, o quello che è usato meno di recente? Voglio dire se i dati di recente accesso sono d1 che è più vecchio per inserimento e la cache è piena mentre sostituendo i dati sostituirà d1?

  2. Sto utilizzando PHP per l'interazione con memcached. Posso avere il controllo su come i dati vengono sostituiti in memcached? Come se non volessi che alcuni dei miei dati venissero sostituiti fino alla scadenza, anche se la cache è piena. Questi dati non dovrebbero essere sostituiti, ma altri dati possono essere rimossi per l'inserimento.

  3. Quando i dati sono scaduti vengono rimossi immediatamente?

  4. Qual è l'impatto del numero di chiavi memorizzate sulle prestazioni memcached?

  5. Qual è il significato dell'opzione -k in memcached.conf? Non sono in grado di capire cosa significhi "bloccare tutta la memoria impaginata". Inoltre, la descrizione in README non è sufficiente.

+2

LRU sta per Least Recently Used ... if the memcache wiki Detto questo, suppongo che sia il caso, a meno che tu non abbia delle prove da suggerire altrimenti –

+1

Ad essere onesti, sembra che tu stia pensando troppo o come memcached non sia quello che vuoi. memchached è una * cache * con lo scopo di rendere rapidamente disponibili i dati utilizzati più spesso, che altrimenti richiederebbero un po 'di tempo per essere caricati. Non garantisce assolutamente che questi dati saranno disponibili ogni volta, o per quanto tempo, o per nulla. Non è un archivio dati primario. Tutto ciò che fa è * forse * accelerare il recupero dei dati a volte, punto. Non puoi mai presumere che alcuni dati saranno nella cache, periodo. Questa è la natura del caching. – deceze

+0

http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used: l'hai letto? –

risposta

16

Quando memcached ha bisogno di memorizzare nuovi dati nella memoria, e la memoria è già piena, cosa succede è questo:

  • ricerche memcached per AA adatto ingresso * scaduta, e se uno viene trovato, sostituisce i dati in quella voce. Che risponde punto 3) i dati non viene rimosso immediatamente, ma quando devono essere impostati nuovi dati, lo spazio è riassegnato
  • se non viene trovata alcuna voce scaduto, quello che viene utilizzato meno di recente è sostituito

* Tenete guarda come memcached si occupa della memoria: assegna blocchi di dimensioni diverse, quindi la dimensione dei dati che andrai a impostare nella cache gioca un ruolo nel decidere quale voce viene rimossa. Le voci sono 2K, 4K, 8K, 16K ... ecc. Fino a 1M di dimensione.

Tutte queste informazioni possono essere trovate in the documentation, quindi basta leggere attentamente. Come dice @deceze, memcached non garantisce che i dati saranno disponibili in memoria e devi essere preparato per una tempesta di miss cache. Un approccio interessante per evitare una tempesta miss è quello di impostare il tempo di scadenza con un offset casuale, ad esempio 10 + [0..10] minuti, il che significa che alcuni elementi verranno memorizzati per 10 e altri per 20 minuti (l'obiettivo è che non tutti gli articoli scadono allo stesso tempo).

E se si desidera conservare qualcosa nella cache, è necessario fare due cose:

  • uno script warm-up, che chiede di cache per caricare i dati.Quindi è sempre usato di recente
  • 2 tempi di scadenza per l'articolo: una vera e propria scadenza, diciamo in 30 minuti; un altro - memorizzato nella cache insieme all'elemento - tempo logico di scadenza, diciamo tra 10 minuti. Quando si recuperano i dati dalla cache, si controlla la scadenza logica e se è scaduta: ricaricare i dati e impostarli nella cache per altri 30 minuti. In questo modo non colpirai mai il tempo di scadenza della cache reale e i dati verranno periodicamente aggiornati.

5) Qual è il significato di opzione -k in "memcached.conf". Non sono in grado di capire cosa significa "Blocca tutta la memoria di paging". Anche la descrizione di in README non è sufficiente.

Indipendentemente dalla quantità di memoria allocata per memcached, utilizzerà solo l'importo necessario, ad es. assegna solo la memoria effettivamente utilizzata. Con l'opzione -k tuttavia, l'intera memoria è riservata all'avvio della memcached, quindi assegna sempre l'intera quantità di memoria, non importa se ne ha bisogno o no

Problemi correlati