cara me-restart / menghapus memcache tanpa me-restart seluruh server web?

47

/opt/eduserver/eduserver memberi saya opsi:

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

di mana memcache adalah modul php ada memcache.inidi /opt/eduserver/etc/php/conf.d.

Saya ingin menghapus memcache dari baris perintah. Dapatkah saya melakukannya entah bagaimana tanpa 'menyentuh' bagian lain dari server web?

Radek
sumber

Jawaban:

94

Iya. Anda dapat menghapus memcache. mencoba:

telnet localhost 11211
flush_all
quit

jika memcache tidak berjalan di localhost 11211, Anda harus menyesuaikannya.

heiko
sumber
3
Bisakah saya melakukan ini secara tidak interaktif?
Radek
2
Saya mencoba memverifikasi ini sebenarnya efektif. Sejauh ini statistik masih menunjukkan total_items 3926. Saya mengharapkan total_items turun menjadi 0. Apakah itu bukan cara memverifikasi cache disiram?
Danny Armstrong
4
@DannyArmstrong, flush hanya menandai item yang kedaluwarsa. Memcache tidak langsung menghapus item yang sudah kadaluwarsa dari cache karena alasan kinerja. Anda dapat memperoleh item yang kedaluwarsa, sehingga hilang dari perspektif API
TerryE
@TerryE - Apakah Anda bermaksud mengatakan "Anda tidak bisa mendapatkan barang kadaluwarsa" daripada "Anda bisa mendapatkan barang kadaluarsa"?
Brian Matthews
Ya saya lakukan. Maaf
TerryE
40

Ini juga akan berfungsi menggunakan netcat

echo "flush_all" | nc -q 2 localhost 11211 

Maka tunggu saja "OK".

Danie
sumber
4
tanpa hardcode 2 detik:printf "flush_all\nquit\n" | nc -q -1 127.1 11211
youfu
3
Kebutuhan OSX -w untuk batas waktu:echo "flush_all" | nc -w 2 localhost 11211
mahemoff
tanpa berhenti & menunggu:printf "flush_all" | nc localhost 11211
Gianfranco P.
23

memcflush di alat memcache adalah apa yang Anda inginkan:

memcflush --servers=localhost:11211

Ubah localhostke server apa pun Anda.

Alat memcache mungkin tidak diinstal di server, jika Anda menjalankan OS berbasis Debian Anda dapat menginstalnya seperti ini:

sudo apt-get install libmemcached-tools
merampok
sumber
2
Dalam distribusi Red Hat, utilitas termasuk dalam libmemcached.
Kevin
8

Di Bash Anda dapat menggunakan sintaksis mewah ini:

echo flush_all > /dev/tcp/localhost/11211

Kalau tidak gunakan memflushperintah:

memflush --servers=localhost
kenorb
sumber
Karena telnet dan nc tidak tersedia di server kami, solusi pertama berfungsi dengan baik, terima kasih.
Getz
4

Daripada menunggu timeout Anda dapat membuat perintah seketika dengan mengikuti flush_all dengan quitperintah:

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

Atau jika Anda tidak memiliki nc:

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

Meskipun metode ini tidak akan menghasilkan output, meskipun Anda dapat memverifikasi itu berfungsi dengan memeriksa statsuntuk melihat cmd_flushpeningkatan itu.

polyethene
sumber
3

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

jika Anda ingin menjalankannya secara non-interaktif

terima kasih kepada @heiko

Radek
sumber
Ini bekerja untuk saya, karena saya memiliki host di mana saya tidak ingin menginstal nc. Note that I worked fine for me without either the initial sleep` atau final quit. Saya lakukan( echo 'flush_all' ; sleep 2 ) | telnet myhost.fqdn.com 11211
Joshua Huber
0

jika Anda menggunakan soket untuk menghubungkan ke memcached sintaksnya

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

staabm
sumber