วิธีการรีสตาร์ท / ล้าง memcache โดยไม่ต้องรีสตาร์ทเว็บเซิร์ฟเวอร์ทั้งหมด


47

/opt/eduserver/eduserver ให้ตัวเลือกแก่ฉัน:

การใช้งาน: / opt / eduserver / eduserver {start | stop | startphp | startwww | startooo | stopphp | stopwww | stopooo | restartphp | restartwww | restartooo | สถานะ | เริ่มต้นใหม่ | โหลดแรงอีกครั้ง}

ที่ memcache เป็นโมดูล PHP มีในmemcache.ini/opt/eduserver/etc/php/conf.d

ฉันต้องการล้าง memcache จากบรรทัดคำสั่ง ฉันสามารถทำได้โดยไม่แตะต้องส่วนอื่น ๆ ของเว็บเซิร์ฟเวอร์หรือไม่

คำตอบ:


94

ใช่. คุณสามารถล้าง memcache ลอง:

telnet localhost 11211
flush_all
quit

ถ้า memcache ไม่ทำงานบน localhost 11211 คุณจะต้องปรับมัน


3
ฉันจะทำสิ่งนี้แบบไม่โต้ตอบได้หรือไม่?
Radek

2
ฉันพยายามตรวจสอบว่าจริง ๆ แล้วมีประสิทธิภาพ จนถึงขณะนี้สถิติยังคงแสดง total_items 3926 ฉันคาดหวังว่า total_items จะลดลงเหลือ 0 นั่นไม่ใช่วิธีการตรวจสอบแคชหรือไม่
Danny Armstrong

4
@DannyArmstrong ให้ล้างเฉพาะรายการที่หมดอายุ Memcache ไม่ได้ลบรายการที่หมดอายุจากแคชทันทีด้วยเหตุผลด้านประสิทธิภาพ คุณสามารถได้รับรายการที่หมดอายุดังนั้นพวกเขาจึงหายไปจากมุมมอง API
TerryE

@TerryE - คุณหมายถึงการพูดว่า "คุณไม่สามารถรับไอเท็มที่หมดอายุ" แทนที่จะเป็น "คุณสามารถรับไอเท็มที่หมดอายุ"
Brian Matthews

ใช่ฉันทำ. ขออภัย
TerryE

40

สิ่งนี้จะทำงานโดยใช้ netcat

echo "flush_all" | nc -q 2 localhost 11211 

จากนั้นรอเพียง "ตกลง"


4
โดยไม่ใช้ hardcoded 2 วินาที:printf "flush_all\nquit\n" | nc -q -1 127.1 11211
youfu

3
OSX ต้องการ -w สำหรับการหมดเวลา:echo "flush_all" | nc -w 2 localhost 11211
mahemoff

โดยไม่ต้องออก & รอ:printf "flush_all" | nc localhost 11211
Gianfranco P.

23

memcflush ในเครื่องมือ memcache คือสิ่งที่คุณต้องการ:

memcflush --servers=localhost:11211

เปลี่ยนlocalhostเป็นเซิร์ฟเวอร์ของคุณ

เครื่องมือ memcache อาจไม่ได้รับการติดตั้งบนเซิร์ฟเวอร์หากคุณใช้ระบบปฏิบัติการแบบ 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 ไม่พร้อมใช้งานบนเซิร์ฟเวอร์ของเราโซลูชันแรกใช้งานได้ดีขอบคุณ
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
Joshua Huber

0

ในกรณีที่คุณใช้ซ็อกเก็ตสำหรับเชื่อมต่อกับ memcached ไวยากรณ์คือ

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.