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?

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.


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


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

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

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.


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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.