เมื่อใดที่ฉันควรใช้ Memcache แทน Memcached


321

มันดูเหมือนว่า PHP มีสองห้องสมุด memcached ชื่อmemcacheและmemcached ความแตกต่างคืออะไรและคุณรู้ได้อย่างไรว่าจะใช้อันไหน เป็นหนึ่งล้าสมัยหรือไม่ ดูเหมือนว่า memcached มีวิธีการเพิ่มเติมดังนั้นฉันคิดว่านั่นหมายความว่ามันมีการพัฒนามากที่สุด - แต่ดูเหมือนว่าจะต้องใช้ไลบรารี C / C ++ ภายนอกด้วยดังนั้นฉันจึงไม่แน่ใจว่าฉันจะสามารถติดตั้งได้หรือไม่

ดูเหมือนว่า memcache นั้นใช้เวลานานกว่าไม่ต้องใช้ไลบรารีเพิ่มเติมและมีไบนารีที่รวบรวมไว้ล่วงหน้าสำหรับหน้าต่างแม้แต่! ฉันคิดว่ามันจะเป็นทางเลือกที่ดีกว่าในตอนนี้ อย่างไรก็ตามการใหม่เพื่อ memcached (เซิร์ฟเวอร์) ฉันไม่แน่ใจว่ามีคุณสมบัติที่สำคัญสุดใน memcached (php) ที่ทำให้มันคุ้มค่ากับปัญหาพิเศษหรือไม่


1
ZendCon มีตอนที่ดีเมื่อเปรียบเทียบทั้งสอง ZendCon Sessions ตอนที่ 040: Memcached: อินเตอร์เฟส Memcache ที่ดีกว่า
John Magnolia

ซ้ำของserverfault.com/questions/63383/memcache-vs-memcachedโดยเพียงแค่ไม่กี่วัน แต่ตอนนี้มีจำนวนการดูและออกเสียงลงคะแนน :)
สเตฟาโน

คำตอบ:


249

ห้องสมุดลูกค้า Memcachedเพิ่งเปิดตัวที่มีเสถียรภาพ มันถูกใช้โดยdigg (พัฒนาสำหรับ digg โดย Andrei Zmievski ตอนนี้ไม่ใช้ digg อีกต่อไป) และใช้โปรโตคอล memcachedมากกว่าไคลเอ็นต์ memcache รุ่นเก่า คุณสมบัติที่สำคัญที่สุดที่ memcached มีคือ:

  1. ราชสกุล Cas สิ่งนี้ทำให้ชีวิตของฉันง่ายขึ้นมากและเป็นระบบป้องกันที่ง่ายสำหรับข้อมูลเก่า เมื่อใดก็ตามที่คุณดึงบางสิ่งบางอย่างจากแคชคุณสามารถรับด้วยโทเค็น cas (หมายเลขสอง) คุณสามารถใช้โทเค็นนั้นเพื่อบันทึกวัตถุที่อัปเดตของคุณ ถ้าไม่มีใครอัพเดตค่าในขณะที่เธรดของคุณกำลังรันอยู่การสลับจะสำเร็จ มิฉะนั้นจะมีการสร้างโทเค็น caser ที่ใหม่กว่าและคุณถูกบังคับให้โหลดข้อมูลใหม่และบันทึกอีกครั้งด้วยโทเค็นใหม่
  2. อ่านผ่านcallbacksเป็นสิ่งที่ดีที่สุดตั้งแต่ขนมปังหั่นบาง ๆ มันทำให้รหัสของฉันง่ายขึ้นมาก
  3. getDelayed ()เป็นคุณสมบัติที่ดีที่สามารถลดเวลาที่สคริปต์ของคุณต้องรอให้ผลลัพธ์กลับมาจากเซิร์ฟเวอร์
  4. ในขณะที่เซิร์ฟเวอร์ memcached ควรจะมีเสถียรภาพมาก แต่ก็ไม่ใช่วิธีที่เร็วที่สุด คุณสามารถใช้โปรโตคอลไบนารีแทน ASCII กับไคลเอนต์ที่ใหม่กว่า
  5. เมื่อใดก็ตามที่ท่านจัดเก็บข้อมูลที่ซับซ้อนใน memcached ลูกค้าที่ใช้มักจะทำอนุกรมของมูลค่า (ซึ่งช้า) แต่ตอนนี้กับลูกค้า memcached คุณมีตัวเลือกของการใช้igbinary จนถึงตอนนี้ฉันยังไม่ได้มีโอกาสทดสอบว่าจะเพิ่มประสิทธิภาพได้เท่าไหร่

คะแนนทั้งหมดนี้เพียงพอสำหรับฉันที่จะเปลี่ยนไปใช้ไคลเอนต์ใหม่ล่าสุดและสามารถบอกคุณได้ว่ามันใช้งานได้อย่างมีเสน่ห์ มีการพึ่งพาภายนอกในไลบรารีlibmemcachedแต่มีการจัดการเพื่อติดตั้งอย่างไรก็ตามบน Ubuntu และ Mac OSX ดังนั้นจึงไม่มีปัญหา

หากคุณตัดสินใจที่จะอัปเดตเป็นไลบรารีใหม่กว่าฉันขอแนะนำให้คุณอัปเดตเป็นเซิร์ฟเวอร์รุ่นล่าสุดรวมถึงมีคุณสมบัติที่ดีเช่นกัน คุณจะต้องติดตั้งlibeventเพื่อให้คอมไพล์ แต่บน Ubuntu มันไม่ได้เป็นปัญหามากนัก

ฉันไม่ได้เห็นกรอบใด ๆ ที่รับไคลเอ็นต์ memcached ใหม่จนถึงตอนนี้ (แม้ว่าฉันจะไม่ติดตามพวกเขา) แต่ฉันคิดว่าZendจะขึ้นเครื่องในไม่ช้า

UPDATE

Zend Framework 2 มีอะแดปเตอร์สำหรับ Memcached ซึ่งสามารถพบได้ที่นี่


1
คำตอบที่ยอดเยี่ยม; นอกจากนี้การพึ่งพาภายนอกใน libmemcached เป็นจริงบวกในกรณีนี้เพราะมันเป็นหนึ่งในลูกค้าที่พัฒนาอย่างแข็งขันมากขึ้น
Marc Bollinger

ตกลง การพึ่งพาภายนอก libmemcached ไม่ควรพิจารณาว่าเป็นปัญหาใด ๆ เช่นเดียวกับ libevent
Miha Hribar

1
สิ่งที่ Cas Tokens ฟังดูเหมือนเป็นข้อดีที่สุด ที่จริงแล้วจากการดูคุณสมบัติเหล่านี้ดูเหมือนว่า memcached จะมุ่งหน้าไปยังผู้ถือข้อมูลที่มีการจัดการเช่น DB และน้อยกว่าเช่นแคชชั่วคราว
Xeoncross

หากคุณกำลังมองหาสิ่งที่คุณมี memcachedb ( memcachedb.org ) ซึ่งจริงๆแล้วเป็นเพียง Berkley DB ที่พูดโปรโตคอล memcached
Miha Hribar

8
คำตอบนี้ไม่ได้บอกความแตกต่างระหว่าง memcache และ memcached! memcache เป็นเพียง memcached รุ่นเก่ากว่าหรือไม่
Daniel W.

10

เมื่อใช้ Windows การเปรียบเทียบจะถูกตัดทอน: memcacheดูเหมือนจะเป็นไคลเอ็นต์เท่านั้นที่พร้อมใช้งาน


คุณไม่สามารถเพิ่มmemcachedส่วนขยายในตัวคุณเองได้หรือ
Pacerier

1
ดูเหมือนว่ามันจะไม่จริง commaster.net/content/installing-memcached-windows
Joe Leonard

@JoeLeonard จากหน้าเว็บที่คุณเชื่อมโยงไปยัง: "ในการเชื่อมต่อกับmemcachedใน PHP คุณต้องติดตั้งmemcacheส่วนขยายสำหรับ PHP"
rymo

8

นี่คือ 2013 ลืมความคิดเห็น 2009 ในทำนองเดียวกันหากคุณใช้งานการรับส่งข้อมูลจำนวนมากอย่าคิดคำนึงถึงวิธีการทำด้วย memcache ที่ใช้ windows เมื่อจัดการกับเว็บเซิร์ฟเวอร์ที่มีขนาดใหญ่มาก (500+ ฟรอนต์เอนด์ส่วนท้าย) และเซิร์ฟเวอร์ฐานข้อมูลและรีพลิเคชันด้านหลังมากกว่า 20 รายการ (mysql & mssql มิกซ์) ฟาร์มของเซิร์ฟเวอร์ memcached (เซิร์ฟเวอร์ 12 ตัวในกลุ่ม) รองรับแอพพลิเคชัน OLTP ปริมาณมาก ~ 40K mc-> รับสายต่อวินาที การเรียกเหล่านี้คือสิ่งที่ไม่ต้องเข้าถึงฐานข้อมูล

IMHO การใช้ memcached นี้ช่วยให้ประหยัดอย่างจริงจัง $$$, $$$ ใน CAPEX สำหรับเซิร์ฟเวอร์ DB และสิทธิ์ใช้งานใหม่รวมถึงสัญญาการสนับสนุนสำหรับการออกแบบเชิงพาณิชย์ขนาดใหญ่


48
สิ่งนี้จะตอบคำถามเกี่ยวกับความแตกต่างระหว่างการใช้งาน memcache ทั้งสองใน php ได้อย่างไร
Marki555

9
นี่ควรเป็นความคิดเห็น
เอลียาห์ลินน์

7

Memcached เป็น API ที่ใหม่กว่านอกจากนี้ยังมี memcached ในฐานะผู้ให้บริการเซสชันซึ่งอาจยอดเยี่ยมหากคุณมีฟาร์มเซิร์ฟเวอร์

หลังจากเวอร์ชันนี้ยังคงต่ำมาก 0.2 แต่ฉันได้ใช้ทั้งคู่และฉันไม่พบปัญหาใหญ่ดังนั้นฉันจะไปที่ memcached ตั้งแต่ใหม่


1
ทั้งสองทำงานเป็นตัวจัดการเซสชั่นแม้ว่าฉันจะไม่ต้องการใช้มันสำหรับสิ่งนั้น us3.php.net/manual/en/memcache.examples-overview.php
Xeoncross

ดีที่ฉันไม่ดีใช่มันมีประโยชน์จริงๆบนเซิร์ฟเวอร์ขนาดใหญ่เมื่อ io กลายเป็นสิ่งที่สำคัญมากบวกกับ memcache ไม่ได้ตรวจสอบว่ามันจะไม่ปล่อยวัตถุบางอย่างเพื่อให้ได้หน่วยความจำยากมากที่จะรู้วิธีปรับขนาด
RageZ

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