2011-02-05 10 views
6

Estoy tratando de entender cuál sería la necesidad de ir con una solución como memcached. Puede parecer una pregunta tonta, pero ¿qué es lo que trae a la mesa si todo lo que necesito es almacenar objetos en la memoria caché? ¿Qué hace un hashmap simple?¿Por qué memcached?

Respuesta

3

Citando del memcache web site, Memcache es ...

gratuito & de código abierto, de alto rendimiento, distribuido memoria de objeto de almacenamiento en caché sistema, de carácter genérico, pero destinados a ser utilizados en la aceleración de web dinámico aplicaciones por aliviando la carga de la base de datos.

Memcached es una tienda en-memoria de la llave-valor para los pequeños trozos de datos arbitrarias (cuerdas, objetos) de los resultados de llamadas, llamadas a la API de base de datos, o la página prestación. Memcached es simple pero potente. Su diseño simple promueve el despliegue rápido de , la facilidad de desarrollo, y resuelve muchos problemas que enfrentan las cachés de datos grandes . Su API está disponible para idiomas más populares.

En el fondo se trata de una simple clave/valor tienda

Palabras clave aquí es distribuye. En general, citando de nuevo el sitio de memcache,

Los servidores de Memcached generalmente son ajenos el uno del otro. No hay ninguna diafonía , no hay sincronización, no hay difusión . La falta de interconexiones significa que la adición de más servidores generalmente agregará más capacidad como se espera. Puede haber excepciones a esta regla, pero son excepciones y se consideran cuidadosamente.

Recomiendo leer el detailed description of memcache.

+2

Tengo problemas para analizar el "caché de objetos de memoria distribuida" ... ¿qué se distribuye? si tengo solo un servidor web, ¿qué ofrece Memcached en lugar de solo un hashmap ... parece que lo necesito deletreado :( – treefrog

2

¿Dónde vas a poner este hashmap? Eso es lo que está haciendo por ti. Cualquier estructura que implemente en PHP solo estará disponible hasta que finalice la solicitud. Si arroja cosas en un caché persistente, puede recuperarlas para otras solicitudes, en lugar de reconstruir los datos.

+0

Esto no es sólo para php, sino también para otras tecnologías web que sí ofrecen almacenamiento basado en sesión ... – treefrog

+0

@ Dan Grossman ¿Qué pasaría si Cree manualmente un directorio "store", que almacena cada objeto, un objeto por archivo (y usamos las funciones php serialize/deserialize para establecer/obtener esos objetos). Todos los objetos serían accesibles a través de una clave (el nombre del archivo) elegida por el desarrollador. Para unos 200 objetos, ¿sabes si eso sería más rápido que memcached? – ling

1

El uso de un sistema de caché completamente marcado generalmente le permite replicar la caché en muchos servidores, o simplemente escalar a muchos servidores solo para escalar una gran cantidad de solicitudes simultáneas, todo esto es aceptable rápidamente en términos de respuesta.

2

Sé que esta pregunta es bastante antigua, pero además de poder compartir un caché en varios servidores, también hay otro aspecto que no se menciona en otras respuestas y es la expiración de los valores.

Si almacena los valores en un HashMap, y ese HashMap está ligado al contexto de la aplicación, seguirá creciendo en tamaño, a menos que expire elementos de alguna manera. Memcached caduca objeto de forma perezosa para un rendimiento máximo.

Cuando se agrega un elemento a la memcache, puede tener un tiempo de caducidad, por ejemplo 600 segundos. Una vez que el objeto ha expirado, permanecerá allí, pero si otro objeto lo solicita, lo purgará y devolverá nulo.

De manera similar, cuando la memoria memcached está llena, buscará el primer elemento vencido de tamaño adecuado y lo caducará para dejar espacio para el nuevo elemento. Por último, también puede suceder que la memoria caché esté llena y no haya ningún elemento que expire, en cuyo caso reemplazará los elementos menos usados.

0

Hay un (antiguo) artículo que compara diferentes sistemas de almacenamiento en caché utilizados por PHP: https://www.percona.com/blog/2006/08/09/cache-performance-comparison/

Básicamente, el almacenamiento en caché de archivos es más rápido que memcached.

Para responder a la pregunta, creo que tendrías mejores actuaciones utilizando un sistema de caché basado en archivos.

Éstos son los resultados de las pruebas del artículo:

Cache Type        Cache Gets/sec 
Array Cache        365000 
APC Cache        98000 
File Cache        27000 
Memcached Cache (TCP/IP)    12200 
MySQL Query Cache (TCP/IP)    9900 
MySQL Query Cache (Unix Socket)   13500 
Selecting from table (TCP/IP)   5100 
Selecting from table (Unix Socket)  7400