2012-06-27 7 views
6

Desde el wiki memcached:¿Cómo se reemplazan los datos en memcached cuando está lleno y el rendimiento de Memcache?

Cuando la mesa está llena, inserciones causa subsiguiente datos más antiguos para ser purgados en menos recientemente utilizada (LRU) orden.

Tengo las siguientes preguntas:

  1. Qué datos serán limpios? ¿El que es más antiguo por inserción, o el que se usa menos recientemente? Quiero decir, si los datos accedidos recientemente son d1, que es el más antiguo por inserción y el caché está lleno mientras se reemplazan los datos ¿reemplazará d1?

  2. Estoy usando PHP para interactuar con memcached. ¿Puedo tener control sobre cómo se reemplazan los datos en memcached? Al igual que no quiero que algunos de mis datos sean reemplazados hasta que caduquen, incluso si el caché está lleno. Esta información no se debe reemplazar, en su lugar se pueden eliminar otros datos para su inserción.

  3. Cuando los datos caducan, ¿se eliminan inmediatamente?

  4. ¿Cuál es el impacto del número de claves almacenadas en el rendimiento de memcached?

  5. ¿Cuál es la importancia de la opción -k en memcached.conf? No puedo entender qué significa "bloquear toda la memoria paginada". Además, la descripción en README no es suficiente.

+2

LRU significa Uso menos reciente ... si la wiki de Memcache dice eso, entonces asumiría que es el caso a menos que tengas evidencia que sugiera lo contrario –

+1

Para ser honesto, parece que estás pensando demasiado o que memcached no es lo que quieres. memchached es un * caché * con el propósito de hacer que los datos de uso frecuente estén disponibles rápidamente, lo que de lo contrario puede llevar un tiempo cargar. No garantiza absolutamente que estos datos estén disponibles todo el tiempo, o por cuánto tiempo, o en absoluto. No es un almacén de datos primario. Todo lo que hace es * quizás * acelerar la recuperación de datos a veces, punto. Nunca se puede asumir que ciertos datos estarán en el caché, punto. Esa es la naturaleza del almacenamiento en caché. – deceze

+0

http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used - ¿Has leído eso? –

Respuesta

16

Cuando memcached necesita almacenar nuevos datos en la memoria, y la memoria ya está llena, lo que sucede es lo siguiente:

  • búsquedas memcached para aa entrada terminado * conveniente, y si se encuentra uno, reemplaza los datos en esa entrada. El cual responde el punto 3) los datos no se elimina inmediatamente, pero cuando se deben establecer nuevos datos, el espacio se reasigna
  • si no se encuentra ninguna entrada terminado, el que se utiliza menos recientemente se sustituye

* Tenga en Tenga en cuenta cómo la memcached se ocupa de la memoria: asigna bloques de diferentes tamaños, por lo que el tamaño de los datos que va a establecer en la memoria caché desempeña un papel en la decisión de qué entrada se elimina. Las entradas son 2K, 4K, 8K, 16K ... etc. hasta 1M de tamaño.

Toda esta información se puede encontrar en in the documentation, así que simplemente lea detenidamente. Como dice @deceze, memcached no garantiza que los datos estén disponibles en la memoria y debes estar preparado para una tormenta de caché. Un enfoque interesante para evitar una tormenta fallida es establecer el tiempo de expiración con un desplazamiento aleatorio, digamos 10 + [0..10] minutos, lo que significa que algunos elementos se almacenarán por 10 y otros por 20 minutos (el objetivo es que no todos los artículos caducan al mismo tiempo).

Y si desea conservar algo en la memoria caché, que tiene que hacer dos cosas:

  • un guión de calentamiento, que pide caché para cargar los datos.Por lo tanto, siempre se ha utilizado recientemente
  • 2 tiempos de caducidad para el artículo: un tiempo de caducidad real, digamos en 30 minutos; otro, en caché junto con el elemento - tiempo de vencimiento lógico, digamos en 10 minutos. Cuando recupera los datos del caché, verifica el tiempo de vencimiento lógico y, si está caducado, vuelva a cargar los datos y configúrelos en el caché durante otros 30 minutos. De esta forma, nunca alcanzará el tiempo de caducidad del caché real, y los datos se actualizarán periódicamente.

5) ¿Cuál es el significado de la opción -k en "memcached.conf". No soy capaz de entender qué significa "Bloquear toda la memoria paginada". También la descripción en README tampoco es suficiente.

No importa la cantidad de memoria que asigne a memcached, solo usará la cantidad que necesita, p. Ej. asigna solo la memoria realmente utilizada. Sin embargo, con la opción -k, toda la memoria está reservada cuando se inicia memcached, por lo que siempre asigna la cantidad total de memoria, no importa si la necesita o no

Cuestiones relacionadas