¿Cómo reiniciar / borrar memcache sin reiniciar todo el servidor web?


47

/opt/eduserver/eduserver me da opciones:

Uso: / opt / eduserver / eduserver {start | stop | startphp | startwww | startooo | stopphp | stopwww | stopooo | restartphp | restartwww | restartooo | status | restart | reload | force-reload}

donde Memcache es el módulo php existe memcache.inien /opt/eduserver/etc/php/conf.d.

Quiero borrar la memoria caché de la línea de comando. ¿Puedo hacerlo de alguna manera sin 'tocar' ninguna otra parte del servidor web?

Respuestas:


94

si. puedes borrar la memoria caché. tratar:

telnet localhost 11211
flush_all
quit

si el memcache no se ejecuta en localhost 11211, deberá ajustarlo.


3
¿Puedo hacer esto de manera no interactiva?
Radek

2
Estoy tratando de verificar que esto realmente fue efectivo. Hasta ahora, las estadísticas aún muestran total_items 3926. Esperaba que total_items cayera a 0. ¿No es así como verificar que la caché se ha vaciado?
Danny Armstrong

44
@DannyArmstrong, la descarga solo marca los elementos como caducados. Memcache no elimina elementos caducados de la memoria caché de inmediato por razones de rendimiento. Puede obtener elementos caducados, por lo que han desaparecido desde una perspectiva API
TerryE

@TerryE: ¿quiere decir "No puede obtener elementos caducados" en lugar de "Puede obtener elementos caducados"?
Brian Matthews el

Sí. Lo siento
TerryE

40

Esto también funcionará usando netcat

echo "flush_all" | nc -q 2 localhost 11211 

Entonces solo espera el "OK".


44
sin codificar 2 segundos:printf "flush_all\nquit\n" | nc -q -1 127.1 11211
youfu

3
OSX necesita -w para el tiempo de espera:echo "flush_all" | nc -w 2 localhost 11211
mahemoff

sin dejar de fumar y esperar:printf "flush_all" | nc localhost 11211
Gianfranco P.

23

memcflush en las herramientas de memcache es lo que quieres:

memcflush --servers=localhost:11211

Cambie localhosta lo que sea su servidor.

Es posible que las herramientas de memcache no se instalen en el servidor, si está ejecutando un sistema operativo basado en Debian, puede instalarlo así:

sudo apt-get install libmemcached-tools

2
En las distribuciones de Red Hat, la utilidad está incluida en libmemcached.
Kevin

8

En Bash puedes usar esta elegante sintaxis:

echo flush_all > /dev/tcp/localhost/11211

De lo contrario, use el memflushcomando:

memflush --servers=localhost

Como telnet y nc no estaban disponibles en nuestros servidores, la primera solución funciona bien, gracias.
Getz

4

En lugar de esperar tiempos de espera, puede hacer que el comando sea instantáneo siguiendo flush_all el quitcomando:

printf "flush_all\r\nquit\r\n" | nc localhost 11211

Alternativamente, si no tienes nc:

printf "flush_all\r\nquit\r\n" > /dev/tcp/127.0.0.1/11211

Aunque este método no producirá una salida, aunque puede verificar que funciona verificando statsque haya cmd_flushaumentado.


3

(sleep 2; echo flush_all; sleep 2; echo quit; ) | telnet 127.0.0.1 11211

si quieres ejecutarlo de forma no interactiva

gracias a @heiko


Esto funcionó para mí, ya que tenía un host donde no quería instalar nc. Note that I worked fine for me without either the initial sleep` o la final quit. Lo hice( echo 'flush_all' ; sleep 2 ) | telnet myhost.fqdn.com 11211
Joshua Huber

0

en caso de que use un socket para conectarse a memcached, la sintaxis es

echo "flush_all" | nc -U ~/memcached.sock

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.