2012-04-12 9 views
12

Quando Memcache è pieno, memcache utilizza l'algoritmo LRU (ultimo utilizzato recentemente) per liberare memoria. La mia domanda è l'algoritmo LRU piuttosto cancella le voci che non sono state utilizzate per un certo periodo di tempo (ultimo utilizzato recentemente) rispetto agli articoli scaduti? Le voci in scadenza non vengono eliminate in quel preciso momento ma quando la prossima volta qualcuno tenta di accedervi (AFAIR). Quindi l'algoritmo LRU (anche) terrà conto della scadenza delle chiavi?La LRU cancellerà le voci che non sono state utilizzate per un certo periodo di tempo?

risposta

35

Per capire come memcached LRU è necessario approfondire e capire come memcached memorizza gli elementi. Gli articoli vengono archiviati in base alla loro dimensione, è sufficiente mettere tutti gli elementi che consentono di memorizzare 100k nella stessa lastra, mentre altri elementi di 200k vengono memorizzati in una lastra diversa.

Quando la memoria si riempie e si tenta di memorizzare un oggetto da 100k, memcached applicherà LRU su quella lastra. Se ci sono chiavi scadute o non utilizzate nella lastra da 200k, rimangono lì, mentre se la lastra da 100k ha solo tasti di scelta rapida, uno di quelli basati sull'algoritmo sarà sfrattato.

Torna alla domanda, quando la memoria è piena e si prova a memorizzare un elemento, memcached cercherà prima gli elementi scaduti nella lastra su cui si sta tentando di scrivere, quindi cerca gli elementi meno utilizzati. Quindi sì, prende in considerazione la scadenza delle chiavi, o meglio ancora, le chiavi scadute vanno prima prima di LRU.

Inoltre, quando si tenta di ottenere un oggetto che ha superato la data di scadenza, tale oggetto viene rimosso e la memoria viene recuperata.

Maggiori dettagli su (un sacco su Google per l'allocazione della memoria memcached che spiega LRU e, in modo un sacco di leggere su questo):

http://returnfoo.com/2012/02/memcached-memory-allocation-and-optimization-2/

http://www.adayinthelifeof.nl/2011/02/06/memcache-internals/

E davvero un bel strumento che ho consigliare su ogni argomento memcached:

http://code.google.com/p/phpmemcacheadmin/

Spero che aiuti!

+0

grazie mille, quella era davvero la risposta che stavo cercando! grazie per le risorse aggiuntive! – zaphod1984

+0

Oh amico, grazie per quello strumento !! – ahskaus

0

Da quello che so questa affermazione non è vera.

"Torna alla tua domanda, quando la memoria è piena e si cerca di memorizzare un elemento, memcached cercherà prima per gli elementi scaduti nella lastra che si sta tentando di scrivere, quindi cercare gli elementi meno utilizzati. Così sì, prende in considerazione la scadenza delle chiavi, o meglio ancora, le chiavi scadute vanno prima prima di LRU. "

Memcache eliminerà l'elemento in base a LRU (non importa se ha articoli scaduti purché siano utilizzati più di recente di un altro tasto (anche valido)).

Testato qualche tempo fa su Memcache 1.4.4.

Problemi correlati