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?

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ć.


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”.


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

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

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.


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.