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?

Jawaban:


94

Iya. Anda dapat menghapus memcache. mencoba:

telnet localhost 11211
flush_all
quit

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


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".


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

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

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.


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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.