Wie starte ich memcache neu / lösche es, ohne den gesamten Webserver neu zu starten?

47

/opt/eduserver/eduserver gibt mir Möglichkeiten:

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

Wo Memcache ist PHP-Modul gibt es memcache.iniin /opt/eduserver/etc/php/conf.d.

Ich möchte den Memcache von der Kommandozeile löschen. Kann ich das irgendwie tun, ohne irgendeinen anderen Teil des Webservers zu berühren?

Radek
quelle

Antworten:

94

Ja. Sie können den Memcache löschen. Versuchen:

telnet localhost 11211
flush_all
quit

Wenn der Memcache auf localhost 11211 nicht ausgeführt wird, müssen Sie ihn anpassen.

heiko
quelle
3
Kann ich das nicht interaktiv machen?
Radek
2
Ich versuche zu überprüfen, ob dies tatsächlich wirksam war. Bisher zeigt stats noch total_items 3926. Ich hatte erwartet, dass total_items auf 0 sinkt. Ist das nicht der Grund, warum der Cache geleert wurde?
Danny Armstrong
4
@DannyArmstrong, Flush markiert nur Elemente als abgelaufen. Memcache entfernt aus Leistungsgründen abgelaufene Elemente nicht sofort aus dem Cache. Sie können abgelaufene Elemente erhalten, sodass sie aus einer API-Perspektive verschwunden sind
TerryE
@TerryE - Wollen Sie damit sagen, dass Sie keine abgelaufenen Artikel erhalten können, anstatt "Sie können abgelaufene Artikel erhalten"?
Brian Matthews
Ja, ich will. Entschuldigung
TerryE
40

Dies funktioniert auch mit Netcat

echo "flush_all" | nc -q 2 localhost 11211 

Dann warten Sie einfach auf das "OK".

Danie
quelle
4
printf "flush_all\nquit\n" | nc -q -1 127.1 11211
Ohne Hardcodierung
3
OSX braucht -w für die Auszeit:echo "flush_all" | nc -w 2 localhost 11211
Mahemoff
ohne zu beenden und zu warten:printf "flush_all" | nc localhost 11211
Gianfranco P.
23

memcflush in den memcache tools ist was du willst:

memcflush --servers=localhost:11211

Wechseln Sie localhostzu Ihrem Server.

Die memcache-Tools sind möglicherweise nicht auf dem Server installiert. Wenn Sie ein Debian-basiertes Betriebssystem verwenden, können Sie es folgendermaßen installieren:

sudo apt-get install libmemcached-tools
robbrit
quelle
2
In Red Hat-Distributionen ist das Dienstprogramm in enthalten libmemcached.
Kevin
8

In Bash können Sie diese ausgefallene Syntax verwenden:

echo flush_all > /dev/tcp/localhost/11211

Ansonsten benutze den memflushBefehl:

memflush --servers=localhost
Kenorb
quelle
Da telnet und nc auf unseren Servern nicht verfügbar waren, funktioniert die erste Lösung, danke.
Getz
4

Anstatt für Timeouts warten , können Sie den Befehl augenblicklich machen , indem Sie flush_all mit dem quitBefehl:

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

Alternativ, wenn Sie nicht haben nc:

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

Obwohl dieses Verfahren wird eine Leistung nicht produzieren, obwohl Sie überprüfen können , es funktioniert , indem überprüft , statsdas sehen cmd_flusherhöht.

Polyethylen
quelle
3

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

wenn Sie es nicht interaktiv ausführen möchten

danke an @heiko

Radek
quelle
Dies funktionierte für mich, da ich einen Host hatte, bei dem ich weder nc. Note that I worked fine for me without either the initial sleep noch final installieren wollte quit. Ich habe( echo 'flush_all' ; sleep 2 ) | telnet myhost.fqdn.com 11211
Joshua Huber
0

Falls Sie einen Socket für die Verbindung zu memcached verwenden, lautet die Syntax

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

staabm
quelle