2012-08-12 13 views
11

que estaba buscando en el php docs on memcache y se dio cuenta de que en vez de hacer
$mem->connect('localhost', 11211) puedo hacer en lugar
$mem->addServer('localhost', 11211)Memcache conectan vs addServer

Y de esta manera si no terminan usando la conexión Memcache, ganó No te molestes en conectarte.

Esto me hizo preguntarme, ¿por qué alguien alguna vez usar connect() más de addServer()?

Parece una posible conexión innecesaria. ¿Me estoy perdiendo de algo?

Respuesta

10

connect y pconnect parecen ser llamadas de más bajo nivel, que realizan una sola tarea sin demasiada sobrecarga. addServer OTOH es de más alto nivel, administra varios servidores, reintenta cuando uno de ellos falla, etc. Tengo la impresión de que este último depende de que el primero haga su tarea.

Desde el punto de vista del usuario final, hay muy poca ventaja en el uso de la función de nivel inferior, excepto tal vez como una pequeña mejora de rendimiento (si sabe usará la conexión de inmediato, solo tiene un servidor de memcached único y no es necesario que mantenga una conexión persistente, o de hecho quiere que lo reinicie para la resolución de problemas, etc. - podría ser más rápido simplemente conectarse a pedido). Solo si necesita más control sobre el ciclo de vida de la conexión (por ejemplo, si está diseñando su propia estrategia de almacenamiento en caché), esas funciones serán útiles.

En otras palabras, el hecho de que esas funciones estén expuestas en la API no implica que haya un caso de uso común para ellas. Sin embargo, a menudo es mejor proporcionar más herramientas para interactuar con un sistema que menos, ya que fomenta la creación de plataformas.

3

La diferencia se explica en realidad bastante bien en la página de documentos para Memcache::addServer

connect() hace una conexión directa con una sola instancia de memcached.

addServer() agrega una entrada al grupo de servidores que utiliza la extensión Memcache, pero no se conecta hasta que hace algo que requiere una conexión.

Al usar este método (a diferencia de Memcache :: connect() y Memcache :: pconnect()), la conexión de red no se establece hasta que realmente se necesita. Por lo tanto, no hay gastos generales en la adición de una gran cantidad de servidores al grupo, aunque es posible que no se utilicen.

El uso de un grupo de servidores significa que si una instancia/conexión memcached arroja un error de nivel bajo, la extensión de Memcache se conectará automáticamente a otro servidor para realizar la solicitud.

3

Memcache es un caché distribuido por diseño. Cuando utiliza un conjunto de servidores, los objetos se almacenan en todos los servidores mediante un mecanismo de distribución de claves que selecciona un servidor según el peso del servidor y el hash de la clave.

Ahora, en una configuración en 2 servidores memcache, uno iría así:

$memcache = new Memcache; 
$memcache->addServer('memcache_host1', 11211); 
$memcache->addServer('memcache_host2', 11211); 

la publicación de estas llamadas, el proceso php verá el grupo de servidores con dos servidores y distribuir los objetos de manera uniforme a ellos como los pesos predeterminados se seleccionan en llamadas Memcache :: addServer. Por lo tanto, una llamada a Memcache :: get o a Memcache :: set guardará un objeto o recuperará un valor clave del host correcto del grupo de servidores según la clave.

Memcache :: connect, sin embargo, reinicializa el grupo de hosts y asume que solo hay un único host disponible, y todos los objetos están almacenados en ese host. Esto también significa que si usted hace esto:

$memcache = new Memcache; 
$memcache->addServer('memcache_host1', 11211); 
$memcache->addServer('memcache_host2', 11211); 

$memcache->connect('memcache_host1', 11211); 

La última llamada despejaría el grupo de servidores y todas las teclas después de la Memcache :: connect llamada será salvo en memcache_host1. Por lo tanto, Memcache :: connect se usa idealmente en una única configuración de host y nunca con un grupo a menos que la intención sea hablar con un host específico en un grupo para obtener estadísticas, operaciones de mantenimiento o esquemas especiales de almacenamiento en caché. Más discusión here.