¿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?

Radek
fuente

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.

heiko
fuente
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".

Danie
fuente
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
robbrit
fuente
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
kenorb
fuente
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.

polietileno
fuente
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

Radek
fuente
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

staabm
fuente