Как перезапустить / очистить memcache, не перезагружая весь веб-сервер?

47

/opt/eduserver/eduserver дает мне варианты:

Использование: / opt / eduserver / eduserver {start | stop | startphp | startwww | startooo | stopphp | stopwww | stopooo | restartphp | restartwww | restartooo | status | restart | reload | force-reload}

где Memcache является PHP модуля есть memcache.iniв /opt/eduserver/etc/php/conf.d.

Я хочу очистить memcache из командной строки. Могу ли я сделать это как-нибудь, не «прикасаясь» к какой-либо другой части веб-сервера?

Радек
источник

Ответы:

94

да. Вы можете очистить memcache. пытаться:

telnet localhost 11211
flush_all
quit

если memcache не работает на localhost 11211, вам придется его настроить.

Хайко
источник
3
Могу ли я сделать это не в интерактивном режиме?
Радек
2
Я пытаюсь убедиться, что это действительно эффективно. Пока что статистика все еще показывает total_items 3926. Я ожидал, что total_items упадет до 0. Разве это не то, как проверить, что кэш был очищен?
Дэнни Армстронг
4
@DannyArmstrong, flush помечает только элементы как просроченные. Memcache не удаляет просроченные элементы из кэша сразу по соображениям производительности. Вы можете получить элементы с истекшим сроком действия, поэтому они исчезли с точки зрения API
TerryE
@TerryE - Вы хотите сказать «Вы не можете получить товары с истекшим сроком» вместо «Вы можете получить товары с истекшим сроком»?
Брайан Мэтьюз
Да. Извините
TerryE
40

Это также будет работать с использованием Netcat

echo "flush_all" | nc -q 2 localhost 11211 

Тогда просто жди "ОК".

Danie
источник
4
без жестко printf "flush_all\nquit\n" | nc -q -1 127.1 11211
заданных
3
OSX требуется -w для тайм-аута:echo "flush_all" | nc -w 2 localhost 11211
mahemoff
без выхода и ожидания:printf "flush_all" | nc localhost 11211
Джанфранко П.
23

memcflush в инструментах memcache есть то, что вы хотите:

memcflush --servers=localhost:11211

Перейдите localhostна любой сервер.

Инструменты memcache могут быть не установлены на сервере, если вы используете ОС на базе Debian, вы можете установить ее следующим образом:

sudo apt-get install libmemcached-tools
robbrit
источник
2
В дистрибутивах Red Hat утилита включена в libmemcached.
Кевин
8

В Bash вы можете использовать этот необычный синтаксис:

echo flush_all > /dev/tcp/localhost/11211

В противном случае используйте memflushкоманду:

memflush --servers=localhost
kenorb
источник
Поскольку telnet и nc не были доступны на наших серверах, первое решение работает отлично, спасибо.
Getz
4

Вместо того , чтобы ждать тайм - аут вы можете сделать команду мгновенным, следуя flush_all с quitкомандой:

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

В качестве альтернативы, если у вас нет nc:

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

Хотя этот метод не будет производить вывод, хотя вы можете убедиться, что он работает, проверив stats, cmd_flushувеличилось ли оно.

полиэтен
источник
3

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

если вы хотите запустить его не в интерактивном режиме

благодаря @heiko

Радек
источник
Это сработало для меня, так как у меня был хост, на котором я не хотел устанавливать nc. Note that I worked fine for me without either the initial sleep` или финал quit. Я сделал( echo 'flush_all' ; sleep 2 ) | telnet myhost.fqdn.com 11211
Джошуа Хубер
0

в случае, если вы используете сокет для подключения к memcached, синтаксис

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

staabm
источник