2012-07-20 18 views
6

Soy nuevo en Memcached y acabo de empezar a usar eso. Tengo algunas preguntas:Memcached - Cómo funciona

  1. he implementado MemCached en mi clase de base de datos de php, donde estoy almacenando conjunto de resultados (arrays) en Memcache. Mi pregunta es que, como lo es para el sitio web, digamos si 4 usuarios acceden a la misma página y al mismo proceso de ejecución de la consulta, entonces ¿qué haría Memcache? Según mi entendimiento para 1 usuario, se obtendrá de DB, para el sistema de descanso 3 usará Memcache. ¿está bien?

  2. 4 usuarios quieren decir que se generarán objetos de memcache? pero todos usarán la misma memoria? ¿Lo mismo se aplica a 2 páginas diferentes en el sitio web? como dos páginas usarán

    $obj = memcached->connect(parameter); 
    
  3. He realizado una pequeña prueba. Pero los resultados son asombrosos, cuando ejecuto la consulta con declaraciones mysql normales, el tiempo de ejecución es menor que cuando mi código usa memcached. ¿porqué es eso? si ese es el caso por el que está escrito que Memcache es rápido.

  4. Por favor dé algunos ejemplos para probar eficazmente el tiempo de ejecución de memcached como comparar a mormal mysql_fetch_object.

+1

Es su código, usted decidirá cuando se utiliza Memcache. –

+0

Si el servidor mysql está almacenado en el mismo servidor que el servidor web, y si solo está utilizando consultas estándar, entonces no verá ninguna ganancia de rendimiento al usar memcached. –

+0

sí, tanto databse como webserve están instalados en el mismo servidor. – user1421407

Respuesta

3

usted tiene dos razones para utilizar Memcache:

1. Descargue su servidor de base de datos

Es decir, si tiene una gran carga en su servidor de base de datos porque sigue consultando lo mismo una y otra vez y la memoria caché mysql interna no funciona tan rápido como se esperaba. O bien, es posible que tenga problemas con el rendimiento de escritura que afecte a su servidor, y luego Memcache lo ayudará a descargar mysql de una manera consistente y mejor.

En el caso de que mi servidor no esté estresado, no podría haber ninguna ventaja al usar memcached si es principalmente para aumentar el rendimiento. Memcached sigue siendo un servidor, usted todavía tiene que conectarse y hablar con él, por lo que el aspecto de la red aún se mantiene.

2. Compartir datos entre usuarios sin depender de la base de datos

En otro caso, es posible que desee compartir algunos datos o estados entre usuarios de su aplicación web sin depender de archivos o en un servidor sql. Con memcached, puede establecer un valor desde la perspectiva de un usuario y cargarlo desde otro usuario.

Buenos ejemplos de eso serían los registros de chat entre usuarios, no desea almacenar todo en una base de datos porque hace muchas escrituras y lecturas y desea compartir los datos y no quiere perder todo en caso de que se produzca un error y se reinicie el servidor ...

Espero que mi respuesta sea satisfactoria.

Buena suerte

1
  1. Sí que tiene razón. Básicamente, esto se llama almacenamiento en caché y no está relacionado con Memcached.

  2. No entiendo completamente. Si los 4 usuarios se conectan al mismo daemon de memchache, usarán la memoria compartida, sí.

  3. No ha dado ningún código, por lo que es difícil de decir. Puede haber muchas razones, por lo que no sacaría conclusiones con tan poca información.

  4. Necesita medir el tráfico de su red con una profunda inspección de paquetes para probar y comparar eficazmente ambos tiempos de ejecución. No puedo dar un ejemplo para eso en esta respuesta. Es posible que esté de acuerdo con solo usar microtime y registrar si la memoria caché fue aciertada (el resultado ya estaba en la caché) o no (aún no está en la memoria caché, debe tomarla de la base de datos).

4
  1. Memcache no funciona "automáticamente". Es solo un mapa de clave => valor. Debe determinar cómo se usa e implementarlo.

    El método preferido es:
    A. Intento de llegar desde Memcache
    A. B. Si no, ir de db, añadir a memcache
    C. devolver resultado
    D. Si alguna vez actualizar los datos , caduque todas las claves asociadas

    Esto no evitará que la misma consulta se ejecute en el db varias veces. Si 2 usuarios obtienen los mismos datos al mismo tiempo, y todo se ejecuta casi al mismo tiempo, ambos intentos de recuperación de Memcache fallarán y se agregarán a Memcache. Y eso usualmente está bien.

  2. En el código, creará tantas conexiones como usuarios actuales, ya que se ejecuta desde php, que se ejecuta para cada usuario. También es posible que se conecte varias veces (si no tiene cuidado con su código) por lo que podría ser mucho más veces.

  3. Muchas veces, el mayor retraso para Memcache AND sql es en realidad la latencia de la red. Si sql está en la misma máquina y Memcache en una máquina diferente, es probable que vea tiempos más lentos para Memcache.

    Además, muchos frameworks/personas no implementan correctamente la obtención múltiple. Por lo tanto, si tienes 100 ID y obtienes ID de Memcache, obtendrás 100 accesos individuales en lugar de 1 multiequipo. Eso es una gran ralentización.

    Memcache es rápido. SQL con caché de consultas para selecciones simples también es rápido. Normalmente, se utiliza Memcache cuando:

    las consultas que se están ejecutando son complicadas/lenta
    O
    es más rentable utilizar Memcache entonces que todo el mundo golpear el servidor SQL
    O
    tiene tantos usuarios que la base de datos no es suficiente para mantenerse al día con la carga
    O
    desea probar una tecnología porque cree que es bueno tenerla en su currículum.

  4. Puede usar cualquier variedad de software de creación de perfiles como xdebug o phprof.

Alternativamente, usted puede hacer esto aunque menos fiable debido a otras cosas que suceden en su servidor:

$start = microtime(true); 
// do foo 
echo microtime(true) - $start; 

$start = microtime(true); 
// do bar 
echo microtime(true) - $start;