Làm thế nào để khởi động lại / xóa memcache mà không cần khởi động lại toàn bộ máy chủ web?


47

/opt/eduserver/eduserver cho tôi lựa chọn:

Cách sử dụng: / opt / eduserver / eduserver {start | stop | startphp | startwww | startooo | stopphp | stopwww | stopooo | restartphp | restartwww | restartooo | status | restart | tải lại | buộc tải lại}

nơi memcache là mô-đun php có memcache.initrong /opt/eduserver/etc/php/conf.d.

Tôi muốn xóa memcache khỏi dòng lệnh. Tôi có thể làm điều đó bằng cách nào đó mà không 'chạm' vào bất kỳ phần nào khác của máy chủ web không?

Câu trả lời:


94

Đúng. bạn có thể xóa memcache. thử:

telnet localhost 11211
flush_all
quit

nếu memcache không chạy trên localhost 11211, bạn sẽ phải điều chỉnh nó.


3
Tôi có thể làm điều này không tương tác?
Radek

2
Tôi đang cố gắng xác minh điều này thực sự hiệu quả. Cho đến nay, số liệu thống kê vẫn hiển thị Total_items 3926. Tôi đã mong đợi Total_items giảm xuống 0. Đó không phải là cách để xác minh bộ đệm đã bị xóa?
Daniel Armstrong

4
@DannyArmstrong, tuôn ra chỉ đánh dấu các mục là hết hạn. Memcache không loại bỏ các mục đã hết hạn khỏi bộ đệm ngay lập tức vì lý do hiệu suất. Bạn có thể nhận được các vật phẩm đã hết hạn, vì vậy chúng đã biến mất từ ​​góc độ API
TerryE

@TerryE - Bạn có nghĩa là nói "Bạn không thể nhận được các mặt hàng đã hết hạn" thay vì "Bạn có thể nhận được các mặt hàng đã hết hạn"?
Brian Matthews

Vâng tôi đồng ý. Xin lỗi
TerryE

40

Điều này cũng sẽ làm việc bằng cách sử dụng netcat

echo "flush_all" | nc -q 2 localhost 11211 

Sau đó, chỉ cần chờ "OK".


4
w / o mã hóa 2 giây:printf "flush_all\nquit\n" | nc -q -1 127.1 11211
youfu

3
OSX cần -w cho thời gian chờ:echo "flush_all" | nc -w 2 localhost 11211
mahemoff

Không bỏ cuộc và chờ đợi:printf "flush_all" | nc localhost 11211
Gianfranco P.

23

memcflush trong các công cụ memcache là những gì bạn muốn:

memcflush --servers=localhost:11211

Thay đổi localhostcho dù máy chủ của bạn là gì.

Các công cụ memcache có thể không được cài đặt trên máy chủ, nếu bạn đang chạy HĐH dựa trên Debian, bạn có thể cài đặt nó như thế này:

sudo apt-get install libmemcached-tools

2
Trong bản phân phối Red Hat, tiện ích được bao gồm trong libmemcached.
Kevin

8

Trong Bash bạn có thể sử dụng cú pháp ưa thích này:

echo flush_all > /dev/tcp/localhost/11211

Nếu không sử dụng memflushlệnh:

memflush --servers=localhost

Vì telnet và nc không có sẵn trên máy chủ của chúng tôi, giải pháp đầu tiên hoạt động tốt, cảm ơn.
Getz

4

Thay vì chờ đợi cho timeouts bạn có thể làm ngay lập tức lệnh bằng cách làm theo flush_all với các quitlệnh:

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

Ngoài ra, nếu bạn không có nc:

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

Mặc dù phương pháp này sẽ không tạo ra đầu ra, mặc dù bạn có thể xác minh nó hoạt động bằng cách kiểm tra statsxem nó có cmd_flushtăng không.


3

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

nếu bạn muốn chạy nó không tương tác

cảm ơn @heiko


Điều này làm việc cho tôi, vì tôi có một máy chủ mà tôi không muốn cài đặt nc. Note that I worked fine for me without either the initial chế độ ngủ hay trận chung kết quit. Tôi đã làm( echo 'flush_all' ; sleep 2 ) | telnet myhost.fqdn.com 11211
Joshua Huber

0

trong trường hợp bạn sử dụng một socket để kết nối với memcached thì cú pháp là

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.