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


47

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

Використання: / opt / eduserver / eduserver {старт | зупинка | startphp | startwww | startooo | stopphp | stopwww | stopooo | restartphp | restartwww | restartooo | статус | перезапуск | перезавантажити | примусити перезавантажити}

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

Я хочу очистити мемаш з командного рядка. Чи можу я це зробити якось, не торкаючись жодної іншої частини веб-сервера?

Відповіді:


94

так. ви можете очистити пам’яті. спробуйте:

telnet localhost 11211
flush_all
quit

якщо memcache не працює на localhost 11211, вам доведеться його відрегулювати.


3
Чи можу я це зробити неінтерактивно?
Радек

2
Я намагаюся переконатися, що це насправді було ефективно. Поки що статистика все ще показує total_items 3926. Я очікував, що Total_items впаде до 0. Хіба це не так, як перевірити кеш?
Danny Armstrong

4
@DannyArmstrong, флеш позначає лише елементи, які минули. Memcache не видаляє прострочені елементи з кеша відразу з міркувань продуктивності. Ви можете отримати товари з простроченим терміном, тому вони зникли з точки зору API
TerryE

@TerryE - Ви хочете сказати "Ви не можете отримати товари з простроченим терміном", а не "Ви можете отримати товари з простроченим терміном"?
Брайан Меттьюз

Так. Вибачте
TerryE

40

Це також працюватиме за допомогою netcat

echo "flush_all" | nc -q 2 localhost 11211 

Тоді просто зачекайте "ОК".


4
без printf "flush_all\nquit\n" | nc -q -1 127.1 11211
жорсткого коду

3
OSX потребує -w для тайм- echo "flush_all" | nc -w 2 localhost 11211
аута

без виходу і чекати:printf "flush_all" | nc localhost 11211
Gianfranco P.

23

memcflush в інструментах пам'яті - те, що ви хочете:

memcflush --servers=localhost:11211

Змініть localhostбудь-який ваш сервер.

Інструменти пам'яті можуть не встановлюватися на сервері, якщо ви працюєте з ОС на базі Debian, ви можете встановити його так:

sudo apt-get install libmemcached-tools

2
У дистрибутивах Red Hat утиліта включена в libmemcached.
Кевін

8

У Bash ви можете використовувати цей химерний синтаксис:

echo flush_all > /dev/tcp/localhost/11211

В іншому випадку використовуйте memflushкоманду:

memflush --servers=localhost

Оскільки telnet та nc були недоступні на наших серверах, перше рішення працює чудово, дякую.
Гетц

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 сон або фінал quit. Я( echo 'flush_all' ; sleep 2 ) | telnet myhost.fqdn.com 11211
Джошуа Хубер

0

у випадку, якщо ви використовуєте сокет для підключення, щоб згаданий синтаксис є

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.