Memcached vs APC ฉันควรเลือกอันไหนดี? [ปิด]


161

ฉันอ่านบทความนี้: http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/จากทางกลับเมื่อ .. ฉันต้องการได้รับโปรแกรมแคชที่ดีที่สุดที่มีอยู่เพื่อให้แอปพลิเคชันของฉันเร็วมาก แน่นอนว่าฉันไม่ต้องการแคชมากเกินไป แต่อย่างน้อยฉันก็เลือกสิ่งที่ดีที่สุด ในบทความว่ามันพูดว่า Memcached ช้าและ APC เป็นไปอย่างรวดเร็วดังนั้นทำไมทุกคนเลือกmemcached ?

http://framework.zend.com/manual/th/zend.cache.backends.html#zend.cache.backends.twolevelsที่นี่มีการกล่าวว่า "ใช้ตัวเร็ว (แต่ จำกัด ) เช่น Apc, Memcache ... และ a "slow" one like File, Sqlite ... "คุณคิดว่าการใช้ Apc เป็นวิธีที่เร็วและ Memcache เนื่องจากความช้าเป็นความคิดที่ดีหรือไม่?


14
BTW: คุณควรใช้ APC apc_storeแม้ว่าคุณจะไม่ได้ใช้งาน Opcode cache อย่างเดียวทำให้ PHP เร็วขึ้นสองเท่า
Kornel

@porneL: คุณหมายถึงอะไร APC เพิ่มความเร็ว PHP หลังจากการติดตั้งหรือไม่แม้ว่าฉันจะไม่เพิ่มรหัสเพื่อแคชอะไรในสคริปต์ของฉัน
Marco Demaio

5
@Marco Demaio: แน่นอน APC ส่วนใหญ่เป็นเครื่องมือเพิ่มประสิทธิภาพ PHP (ปรับตามค่าเริ่มต้นตราบใดที่เปิดใช้งาน) และapc_store()เป็นเพียงโบนัสพิเศษนอกเหนือจากนั้น
Kornel

3
ในปี 2014 ถ้าคุณใช้เพื่อแคชบนเซิร์ฟเวอร์ 1 เครื่องเท่านั้นให้ไปที่ APCu
Flion

นอกจากนี้stackoverflow.com/q/930877/632951
Pacerier

คำตอบ:


268

Memcached เป็นระบบแคชแบบกระจายในขณะที่ APC ไม่ได้เป็นแบบกระจายและส่วนใหญ่เป็น opcode cache

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

คุณควรใช้ opcode cache ซึ่งเป็น APC เสมอ (และ APC จะรวมเข้ากับ php6 iirc ดังนั้นทำไมไม่เริ่มใช้มันตอนนี้)

คุณสามารถ / ควรใช้ทั้งสองเพื่อจุดประสงค์ที่แตกต่างกัน


5
คำตอบที่น่าทึ่ง +1 คำถามของฉันตอนนี้คือopcodeแคชอะไร
Marco Demaio

4
@Karsten หากคุณมีเซิร์ฟเวอร์ที่แตกต่างกัน (เช่นสภาพแวดล้อมแบบคลาวด์ที่โหลดได้) ตราบใดที่คุณไม่จำเป็นต้องรักษา / แชร์สถานะข้าม APC จะทำงานได้ดีเหมือนแคชหน่วยความจำที่ตรง - แม้ว่าอาจจะไม่เหมาะสม เช่นระบบคลาวด์จะต้องอุ่นแคชของตัวเอง ...
เรย์

35
opcodeแคชเป็นหนึ่งที่รวบรวมโค้ด PHP ธรรมดาให้เป็นรหัสเครื่อง ( "opcode") และแล้วเก็บไว้ในรูปแบบที่รวบรวมสำหรับการร้องขอในอนาคต (จนกว่าจะตรวจพบไฟล์ PHP เดิมมีการเปลี่ยนแปลง) ซึ่งหมายความว่า PHP ไม่จำเป็นต้องเรียกใช้ขั้นตอนการคอมไพล์ในทุกคำขอเดียวช่วยประหยัดเวลา เป็นเพียงหนึ่งในวิธีที่ช่วยให้มั่นใจได้ถึงเว็บไซต์ที่รวดเร็ว
Simon East

2
มีสไลด์โชว์ที่น่าสนใจซึ่งอธิบายความแตกต่างของไดอะแกรมและการวัดประสิทธิภาพที่นี่: slideshare.net/FordAntiTrust/php-performance-with-apc-memcached
Simon East

1
memechached สามารถใช้ในระบบที่ไม่กระจายแทนที่จะเป็น APC ได้หรือไม่? มันจะเป็นการดีถ้าคุณจะเก็บไว้แค่ครั้งเดียวในอนาคตคุณจะมีเครื่องจักรเพิ่มขึ้น ขวา? หรือใช้ทั้งสองอันหนึ่งสำหรับ opcode และอีกอันหนึ่งสำหรับการขยายแคช
Adib Aroui

43

Memcached หากคุณต้องการรักษาสถานะในเว็บเซิร์ฟเวอร์หลายแห่ง (หากคุณโหลดสมดุลและสิ่งสำคัญคือสิ่งที่อยู่ในแคชนั้นเหมือนกันสำหรับเซิร์ฟเวอร์ทั้งหมด)

APC หากคุณต้องการเข้าถึงหน่วยความจำอย่างรวดเร็วเพื่ออ่าน (& เขียน) บนเซิร์ฟเวอร์ (หรือแต่ละรายการ)

โปรดจำไว้ว่า APC ยังสามารถรวบรวมและเร่งเวลาการเรียกใช้สคริปต์ของคุณได้อีกด้วย ตัวอย่างเช่นคุณสามารถใช้ APC เพื่อเพิ่มประสิทธิภาพการดำเนินการในขณะที่ใช้ memcached สำหรับที่เก็บแคช


3
APC สามารถแคชที่เก็บข้อมูลได้เช่นกัน .... หรือ?
mr_app

7
การอัปเดต 2014: PHP 5.5 จะรวม Zend Optimizer Plus (ซึ่งเป็นเพียงสำหรับ opcache เท่านั้นดังนั้นจึงไม่ใช่สำหรับแคชของผู้ใช้) และดูเหมือนว่า APC จะไม่พัฒนาเกิน PHP 5.4 หรือไม่ อย่างไรก็ตามตอนนี้มี APCu pecl.php.net/package/APCuซึ่งใช้เฉพาะส่วนแคชผู้ใช้ของ APC
Flion

18

Advatage หลักของ APC คือ opcode cache เนื่องจาก Opencache ของ PHP 5.5 ที่รวมเข้ากับแกนหลักและ APC สำหรับ PHP 5.4 ยังคงถูกตั้งค่าสถานะเป็นเบต้าจึงไม่ใช่การประกาศอย่างเป็นทางการ แต่การพัฒนา APC จะลดลงในอนาคตอันใกล้

ดังนั้นฉันขอแนะนำให้คุณเลือก Memcached


5
ฉันใช้เวลาหลายชั่วโมงบนเว็บเพื่อคิดและฉันมีข้อสรุปเดียวกัน
Nicolas Zozol

9

ฉันใช้ทั้งสองอย่างเพื่อความเร็วและอีกอันเพื่อซิงค์เซิร์ฟเวอร์ทั้งหมดของฉัน หากคุณใช้ memcache โปรดอย่าลืมพอร์ตเปิดที่คุณจะต้องบล็อกด้วย iptables


6

สวัสดี Thomaschaaf ฉันหวังว่านี่จะไม่เป็นเครื่องมือสำหรับคุณ แต่โปรดทราบว่า APC มีปัญหาบางอย่างที่เกี่ยวข้องกับ "แคชผู้ใช้" หากต้องการสรุปสั้น ๆ เมื่อคุณตั้งค่า time-time สำหรับรายการแคชหรือหาก apache ของคุณล่มภายในรหัส APC ภายใน (การหมดเวลาเป็นต้น) คุณอาจประสบปัญหาบางอย่าง

ฉันมีรายการเกี่ยวกับปัญหาที่นี่: http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.htmlและคุณควรอ่านhttp: //t3.dotgnu info / blog / php / user-cache-timebomb.html (จากหนึ่งในนักพัฒนา APC ฉันคิดว่า)


22
ฉันสะดุดในสิ่งนี้และต้องการอัปเดตว่าตอนนี้ดูเหมือนว่าจะได้รับการแก้ไขแล้ว (อย่างที่ควรจะเป็น 2 ปีต่อมา!) นี่คือรายงานข้อบกพร่องที่ปิดตัวอย่างเช่น: bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529
Shane H

1

ฉันใช้ APC เท่านั้นเนื่องจาก APC เป็นแคชโค้ดและทำหน้าที่เหมือนกับ memcache! เพียง 1 ไฟล์กำหนดค่าแทน 2

และที่เดียวเท่านั้นในการตรวจสอบแคชทั้งสอง .....


1

ขึ้นอยู่กับสิ่งที่คุณกำลังทำ แต่สำหรับเว็บไซต์ drupal ของฉันที่ทำงานบน VPS ฉันพบว่า APC ใช้งานได้ดี! หากคุณใช้งาน CentOS 6 จะมีให้เป็นการอัปเดตยำจนตายง่ายต่อการติดตั้งและไม่มีการกำหนดค่าตามค่าเริ่มต้นที่สมเหตุสมผล ไม่มีเกมง่ายๆ

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