come riavviare / cancellare memcache senza riavviare l'intero web server?


47

/opt/eduserver/eduserver mi dà opzioni:

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

dove memcache è il modulo php c'è memcache.iniin /opt/eduserver/etc/php/conf.d.

Voglio cancellare il memcache dalla riga di comando. Posso farlo in qualche modo senza "toccare" qualsiasi altra parte del web server?

Risposte:


94

sì. puoi cancellare il memcache. provare:

telnet localhost 11211
flush_all
quit

se memcache non viene eseguito su localhost 11211, sarà necessario modificarlo.


3
Posso farlo in modo non interattivo?
Radek,

2
Sto cercando di verificare che ciò sia effettivamente efficace. Finora le statistiche mostrano ancora total_items 3926. Mi aspettavo che total_items scendesse a 0. Non è questo il modo per verificare che la cache sia stata svuotata?
Danny Armstrong,

4
@DannyArmstrong, flush contrassegna solo gli articoli come scaduti. Memcache non rimuove immediatamente gli elementi scaduti dalla cache per motivi di prestazioni. Puoi ottenere oggetti scaduti, quindi sono scomparsi dal punto di vista dell'API
TerryE,

@TerryE - Intendi dire "Non puoi ottenere articoli scaduti" anziché "Puoi ottenere articoli scaduti"?
Brian Matthews,

Sì, certamente. Siamo spiacenti
TerryE il

40

Questo funzionerà anche usando netcat

echo "flush_all" | nc -q 2 localhost 11211 

Quindi attendi "OK".


4
senza hardcoded 2 secondi:printf "flush_all\nquit\n" | nc -q -1 127.1 11211
youfu

3
OSX richiede -w per il timeout:echo "flush_all" | nc -w 2 localhost 11211
mahemoff,

senza uscire e attendere:printf "flush_all" | nc localhost 11211
Gianfranco P.

23

memcflush negli strumenti memcache è quello che vuoi:

memcflush --servers=localhost:11211

Passa localhosta qualunque sia il tuo server.

Gli strumenti memcache potrebbero non essere installati sul server, se stai eseguendo un sistema operativo basato su Debian puoi installarlo in questo modo:

sudo apt-get install libmemcached-tools

2
Nelle distribuzioni Red Hat, l'utilità è inclusa in libmemcached.
Kevin,

8

In Bash puoi usare questa sintassi fantasia:

echo flush_all > /dev/tcp/localhost/11211

Altrimenti usa il memflushcomando:

memflush --servers=localhost

Poiché telnet e nc non erano disponibili sui nostri server, la prima soluzione funziona bene, grazie.
Getz,

4

Invece di attendere i timeout è possibile rendere istantaneo il comando seguendo flush_all il quitcomando:

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

In alternativa se non hai nc:

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

Anche se questo metodo non produrrà un output, sebbene sia possibile verificarne il funzionamento controllando statsche sia cmd_flushaumentato.


3

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

se si desidera eseguirlo in modo non interattivo

grazie a @heiko


Questo ha funzionato per me, dato che avevo un host in cui non volevo installare nc. Note that I worked fine for me without either the initial sleep` o il finale quit. L'ho fatto( echo 'flush_all' ; sleep 2 ) | telnet myhost.fqdn.com 11211
Joshua Huber il

0

nel caso in cui si usi un socket per la connessione a memcached, la sintassi è

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.