jak zrestartować / wyczyścić memcache bez restartowania całego serwera WWW?

47

/opt/eduserver/eduserver daje mi opcje:

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

gdzie memcache jest moduł php istnieje memcache.iniw /opt/eduserver/etc/php/conf.d.

Chcę wyczyścić pamięć podręczną z wiersza polecenia. Czy mogę to zrobić w jakiś sposób bez „dotykania” jakiejkolwiek innej części serwera WWW?

Radek
źródło

Odpowiedzi:

94

tak. możesz wyczyścić pamięć podręczną. próbować:

telnet localhost 11211
flush_all
quit

jeśli memcache nie działa na localhost 11211, będziesz musiał go dostosować.

heiko
źródło
3
Czy mogę to zrobić interaktywnie?
Radek,
2
Próbuję sprawdzić, czy to faktycznie było skuteczne. Jak dotąd statystyki wciąż pokazują total_items 3926. Spodziewałem się, że total_items spadnie do 0. Czy to nie jest sposób na sprawdzenie, czy pamięć podręczna została opróżniona?
Danny Armstrong
4
@DannyArmstrong, kolor oznacza tylko przedmioty, które wygasły. Ze względu na wydajność Memcache nie usuwa wygasłych elementów z pamięci podręcznej. Możesz zdobyć przedmioty, które wygasły, więc zniknęły z perspektywy API
TerryE
@TerryE - Czy chcesz powiedzieć „Nie możesz dostać wygasłych przedmiotów” zamiast „Możesz dostać wygasłe przedmioty”?
Brian Matthews,
Tak. Przepraszamy
TerryE
40

Będzie to również działać przy użyciu netcat

echo "flush_all" | nc -q 2 localhost 11211 

Następnie poczekaj na „OK”.

Danie
źródło
4
bez zakodowanych 2 sekund:printf "flush_all\nquit\n" | nc -q -1 127.1 11211
youfu
3
OSX potrzebuje -w do echo "flush_all" | nc -w 2 localhost 11211
przekroczenia
bez wychodzenia i czekania:printf "flush_all" | nc localhost 11211
Gianfranco P.
23

memcflush w narzędziach memcache jest to, czego chcesz:

memcflush --servers=localhost:11211

Zmień localhostna dowolny serwer.

Narzędzia memcache mogą nie zostać zainstalowane na serwerze, jeśli używasz systemu operacyjnego opartego na Debianie, możesz zainstalować go w następujący sposób:

sudo apt-get install libmemcached-tools
robbrit
źródło
2
W dystrybucjach Red Hat narzędzie jest zawarte w libmemcached.
Kevin
8

W Bash możesz użyć tej fantazyjnej składni:

echo flush_all > /dev/tcp/localhost/11211

W przeciwnym razie użyj memflushpolecenia:

memflush --servers=localhost
kenorb
źródło
Ponieważ telnet i nc nie były dostępne na naszych serwerach, pierwsze rozwiązanie działa dobrze, dzięki.
Getz
4

Zamiast czekać na limity czasu można dokonać chwilowej polecenia wykonując flush_all z quitpoleceniem:

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

Alternatywnie, jeśli nie masz nc:

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

Chociaż ta metoda nie wygeneruje wyniku, możesz jednak sprawdzić, czy działa, sprawdzając, statsczy cmd_flushwzrosła.

polietylen
źródło
3

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

jeśli chcesz uruchomić go nieinteraktywnie

dzięki @heiko

Radek
źródło
To działało dla mnie, ponieważ miałem hosta, w którym nie chciałem instalować nc. Note that I worked fine for me without either the initial trybu uśpienia ani finału quit. Zrobiłem( echo 'flush_all' ; sleep 2 ) | telnet myhost.fqdn.com 11211
Joshua Huber,
0

w przypadku użycia gniazda do połączenia z memcached, składnia jest następująca

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

staabm
źródło