comment redémarrer / effacer memcache sans redémarrer le serveur Web entier?


47

/opt/eduserver/eduserver me donne des options:

Utilisation: / opt / eduserver / eduserver {start | stop | startphp | startwww | startooo | stopphp | stopwww | stopooo | restartphp | restartwww | restartooo | status | redémarrer | forcer-recharger}

où memcache est un module php, il est memcache.inidans /opt/eduserver/etc/php/conf.d.

Je veux effacer le memcache de la ligne de commande. Puis-je le faire d'une manière ou d'une autre sans "toucher" une autre partie du serveur Web?

Réponses:


94

Oui. vous pouvez effacer le memcache. essayer:

telnet localhost 11211
flush_all
quit

Si le memcache ne fonctionne pas sur l'hôte local 11211, vous devrez le régler.


3
Puis-je le faire de manière non interactive?
Radek

2
J'essaie de vérifier si cela a été efficace. Jusqu'à présent, les statistiques indiquent toujours total_items 3926. Je m'attendais à ce que total_items passe à 0. N'est-ce pas comment vérifier que le cache a été vidé?
Danny Armstrong

4
@DannyArmstrong, flush marque uniquement les éléments comme expirés. Memcache ne supprime pas immédiatement les éléments expirés du cache pour des raisons de performances. Vous pouvez obtenir des éléments arrivés à expiration, ils ont donc disparu du point de vue de l'API
TerryE

@TerryE - Voulez-vous dire "Vous ne pouvez pas obtenir d'éléments périmés" plutôt que "Vous pouvez obtenir des éléments périmés"?
Brian Matthews

Oui. Désolé
TerryE

40

Cela fonctionnera également avec netcat

echo "flush_all" | nc -q 2 localhost 11211 

Ensuite, attendez le "OK".


4
sans printf "flush_all\nquit\n" | nc -q -1 127.1 11211
codage

3
OSX a besoin de -w pour le timeout:echo "flush_all" | nc -w 2 localhost 11211
mahemoff

sans quitter et attendre:printf "flush_all" | nc localhost 11211
Gianfranco P.

23

memcflush Dans les outils Memcache, c'est ce que vous voulez:

memcflush --servers=localhost:11211

Changez localhostpour quel que soit votre serveur.

Les outils memcache peuvent ne pas être installés sur le serveur. Si vous utilisez un système d’exploitation basé sur Debian, vous pouvez l’installer comme suit:

sudo apt-get install libmemcached-tools

2
Dans les distributions Red Hat, l’utilitaire est inclus dans libmemcached.
Kevin

8

Dans Bash, vous pouvez utiliser cette syntaxe sophistiquée:

echo flush_all > /dev/tcp/localhost/11211

Sinon, utilisez la memflushcommande:

memflush --servers=localhost

Comme Telnet et NC n'étaient pas disponibles sur nos serveurs, la première solution fonctionne bien, merci.
Getz

4

Plutôt que d' attendre les délais d' attente , vous pouvez faire la commande instantanée en suivant flush_all avec la quitcommande suivante :

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

Alternativement si vous n'avez pas nc:

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

Bien que cette méthode ne produise pas de sortie, vous pouvez toutefois vérifier qu'elle fonctionne en vérifiant statssi elle a cmd_flushaugmenté.


3

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

si vous voulez l'exécuter de manière non interactive

grâce à @heiko


Cela a fonctionné pour moi, car j'avais un hôte sur lequel je ne voulais pas installer nc. Note that I worked fine for me without either the initial sleep` ou le final quit. Je l'ai fait( echo 'flush_all' ; sleep 2 ) | telnet myhost.fqdn.com 11211
Joshua Huber

0

si vous utilisez un socket pour vous connecter à memcached, la syntaxe est la suivante:

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.