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?

Radek
la source

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.

heiko
la source
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".

Danie
la source
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
Robbrit
la source
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
Kenorb
la source
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é.

polyéthène
la source
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

Radek
la source
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

staabm
la source