como reiniciar / limpar o memcache sem reiniciar todo o servidor web?

47

/opt/eduserver/eduserver me dá opções:

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

onde memcache é o módulo php existe memcache.inino /opt/eduserver/etc/php/conf.d.

Quero limpar o memcache na linha de comando. Posso fazer isso de alguma forma sem 'tocar' em qualquer outra parte do servidor da web?

Radek
fonte

Respostas:

94

sim. você pode limpar o memcache. experimentar:

telnet localhost 11211
flush_all
quit

se o memcache não for executado no host local 11211, será necessário ajustá-lo.

heiko
fonte
3
Posso fazer isso de maneira não interativa?
Radek
2
Estou tentando verificar se isso realmente foi eficaz. Até agora, as estatísticas ainda mostram o total de itens 3926. Eu esperava que o total de itens caísse para 0. Não é assim que se verifica se o cache foi liberado?
Danny Armstrong
4
@ DannyArmstrong, o flush marca apenas os itens como vencidos. O Memcache não remove itens expirados do cache imediatamente por motivos de desempenho. Você pode obter itens expirados, assim que desapareceram de uma perspectiva API
TerryE
@TerryE - Você quer dizer "Você não pode obter itens expirados" em vez de "Você pode obter itens expirados"?
Brian Matthews
Sim eu quero. Desculpe
TerryE
40

Isso também funcionará usando o netcat

echo "flush_all" | nc -q 2 localhost 11211 

Depois é só aguardar o "OK".

Danie
fonte
4
w / o codificado 2 segundos:printf "flush_all\nquit\n" | nc -q -1 127.1 11211
youfu
3
OSX precisa -w para timeout:echo "flush_all" | nc -w 2 localhost 11211
mahemoff 14/10
sem sair e esperar:printf "flush_all" | nc localhost 11211
Gianfranco P.
23

memcflush nas ferramentas do memcache é o que você deseja:

memcflush --servers=localhost:11211

Mude localhostpara qualquer que seja o seu servidor.

As ferramentas do memcache podem não estar instaladas no servidor, se você estiver executando um sistema operacional baseado no Debian, poderá instalá-lo assim:

sudo apt-get install libmemcached-tools
robbrit
fonte
2
Nas distribuições da Red Hat, o utilitário está incluído no libmemcached.
23416 Kevin
8

No Bash, você pode usar esta sintaxe sofisticada:

echo flush_all > /dev/tcp/localhost/11211

Caso contrário, use o memflushcomando:

memflush --servers=localhost
kenorb
fonte
Como o telnet e o nc não estavam disponíveis em nossos servidores, a primeira solução funciona bem, obrigado.
Getz
4

Em vez de aguardar o tempo limite, você pode tornar o comando instantâneo seguindo flush_all o quitcomando:

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

Alternativamente, se você não tiver nc:

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

Embora esse método não produza uma saída, você pode verificar se funciona, verificando statsse ele cmd_flushaumentou.

polietileno
fonte
3

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

se você quiser executá-lo de maneira não interativa

graças a @heiko

Radek
fonte
Isso funcionou para mim, pois eu tinha um host em que não queria instalar o nc. Note that I worked fine for me without either the initial sleep` ou a final quit. Eu fiz( echo 'flush_all' ; sleep 2 ) | telnet myhost.fqdn.com 11211
Joshua Huber
0

Caso você use um soquete para conectar-se ao memcached, a sintaxe é

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

staabm
fonte