Memcached vs APC nên chọn cái nào? [đóng cửa]


161

Tôi đã đọc bài viết này: http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ từ khi trở về khi .. Tôi muốn có được công cụ bộ nhớ đệm tốt nhất hiện có để ứng dụng của tôi thực sự nhanh. Tất nhiên tôi không muốn quá bộ nhớ cache nhưng ít nhất tôi muốn chọn thứ tốt nhất ngoài đó. Trong bài báo đó có ghi Memcached chậm và apc nhanh, vậy tại sao mọi người lại chọn memcached ?

http://framework.zend.com/manual/en/zend.cache.backends.html#zend.cache.backends.twolevels ở đây có nội dung "sử dụng một cách nhanh chóng (nhưng có giới hạn) như Apc, Memcache ... và a "chậm" như File, Sqlite ... "bạn có nghĩ sử dụng Apc là nhanh và Memcache vì chậm là một ý tưởng tốt?


14
BTW: bạn nên sử dụng APC ngay cả khi bạn không sử dụng apc_store. Opcode cache một mình làm cho PHP nhanh hơn vài lần.
Kornel

@yheL: Ý bạn là gì? APC có tăng tốc độ PHP chỉ sau khi cài đặt không, ngay cả khi tôi không thêm mã vào bộ đệm trong bất kỳ tập lệnh nào?
Marco Demaio

5
@Marco Demaio: Thật vậy. APC chủ yếu là một trình tối ưu hóa PHP (tối ưu hóa theo mặc định miễn là nó được kích hoạt) và apc_store()chỉ là một phần thưởng bổ sung trên đó.
Kornel

3
vào năm 2014, nếu bạn chỉ sử dụng nó để lưu trữ trên 1 máy chủ, hãy truy cập APCu.
Flion

Câu trả lời:


268

Memcached là một hệ thống bộ nhớ đệm phân tán, trong khi APC không được phân phối - và chủ yếu là bộ đệm opcode.

Nếu (và chỉ khi) bạn có một ứng dụng web phải sống trên các máy chủ web khác nhau (cân bằng tải), bạn phải sử dụng memcache để lưu trữ bộ đệm. Nếu không, chỉ cần dính vào APC và bộ đệm của nó.

Bạn phải luôn luôn sử dụng bộ đệm opcode, APC là gì (cũng là APC sẽ được tích hợp vào php6 iirc, vậy tại sao không bắt đầu sử dụng nó ngay bây giờ).

Bạn có thể / nên sử dụng cả hai cho các mục đích khác nhau.


5
Câu trả lời tuyệt vời +1. Câu hỏi của tôi bây giờ là opcodebộ nhớ cache là gì?
Marco Demaio

4
@Karsten Nếu bạn có các máy chủ khác nhau (như môi trường cân bằng tải trên đám mây) miễn là bạn không cần duy trì / chia sẻ trạng thái trên chúng, APC cũng sẽ hoạt động tốt như bộ đệm bộ nhớ thẳng - mặc dù có thể không tối ưu như từng bộ nhớ cá thể đám mây sẽ phải làm ấm bộ nhớ cache của riêng họ ...
Ray

35
Bộ opcodeđệm là một bộ biên dịch mã PHP đơn giản thành mã máy ("opcode") và sau đó lưu nó ở dạng đã biên dịch cho các yêu cầu trong tương lai (cho đến khi phát hiện tệp PHP gốc đã thay đổi). Điều này có nghĩa là PHP không phải chạy bước biên dịch này trên mỗi yêu cầu, tiết kiệm thời gian. Đó chỉ là một trong những cách giúp đảm bảo một trang web nhanh chóng (trong số nhiều trang khác).
Simon East

2
Có một slideshow thú vị giải thích một số khác biệt với sơ đồ và điểm chuẩn, tại đây: sl slideshoware.net/FordAntiTrust/php-performance-with-apc-memcached
Simon East

1
Có thể sử dụng memechached trong hệ thống không phân phối thay vì APC không? Sẽ thật tốt nếu chỉ giữ lại một chiếc nếu trong tương lai bạn sẽ có nhiều máy hơn. đúng? Hoặc sử dụng cả hai, một cho opcode và cái còn lại cho bộ nhớ đệm mở rộng?
Adib Aroui

43

Memcached nếu bạn cần duy trì trạng thái trên một số máy chủ web (nếu bạn tải cân bằng và điều quan trọng là những gì trong bộ đệm đều giống nhau cho tất cả các máy chủ).

APC nếu bạn chỉ cần truy cập vào bộ nhớ nhanh để đọc (& ghi) trên máy chủ (hoặc mỗi).

Hãy nhớ APC cũng có thể biên dịch và tăng tốc thời gian thực hiện tập lệnh của bạn. Vì vậy, ví dụ bạn có thể sử dụng APC để tăng hiệu suất thực thi, trong khi sử dụng memcached để lưu trữ bộ đệm.


3
APC cũng có thể lưu trữ bộ nhớ cache .... Hoặc?
mr_app

7
Cập nhật 2014: PHP 5.5 sẽ bao gồm Zend Tối ưu hóa Plus (chỉ dành cho opcache, vì vậy không dành cho bộ đệm của người dùng) và có vẻ như APC sẽ không được phát triển ngoài PHP 5.4? Tuy nhiên, hiện tại đã có APCu pecl.php.net/package/APCu , chỉ lấy các phần bộ nhớ cache của người dùng của APC
Flion

18

Ưu điểm chính của APC là opcode cache. Do PHP 5.5 tích hợp OpCache vào lõi của nó và APC cho PHP 5.4 vẫn được gắn cờ là beta, nên nó không phải là thông báo chính thức, nhưng sự phát triển của APC sẽ bị loại bỏ trong tương lai gần.

Vì vậy, tôi khuyên bạn nên chọn Memcached.


5
Tôi đã dành hàng giờ trên web để suy nghĩ về nó, và tôi cũng có kết luận tương tự.
Nicolas Zozol

9

Tôi sử dụng cả hai cho tốc độ và cái còn lại để đồng bộ tất cả các máy chủ của tôi. Nếu bạn sử dụng memcache thì xin lưu ý các cổng mở mà bạn sẽ cần chặn với iptables.


6

Xin chào Thomaschaaf, tôi hy vọng đây không phải là công cụ muộn đối với bạn nhưng xin lưu ý rằng APC có một số vấn đề liên quan đến "bộ đệm người dùng". Để làm cho một câu chuyện dài ngắn, khi bạn đặt thời gian chờ cho các mục trong bộ đệm hoặc nếu apache của bạn gặp sự cố bên trong mã APC nội bộ (ví dụ như hết thời gian), thì bạn có thể gặp một số vấn đề.

Tôi có một mục về vấn đề ở đây: http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.html , và bạn cũng nên đọc http: //t3.dotgnu. thông tin / blog / php / user-cache-timebomb.html (từ một trong những nhà phát triển APC tôi nghĩ)


22
Tôi tình cờ phát hiện ra điều này và muốn cập nhật rằng nó dường như đã được giải quyết ngay bây giờ (như vậy, 2 năm sau!). Đây là một báo cáo lỗi đã đóng, ví dụ: bug.debian.org/cgi-bin/orpreport.cgi?orms=572529
Shane H

1

Tôi chỉ sử dụng APC vì APC là bộ đệm mã và hoạt động như memcache! Chỉ có 1 tệp cấu hình thay vì 2.

Và chỉ có 1 nơi để theo dõi cả bộ đệm .....


1

Nó phụ thuộc vào những gì bạn đang làm nhưng đối với các trang web drupal của tôi chạy trên VPS tôi thấy APC hoạt động rất tốt! Nếu bạn đang chạy CentOS 6, nó có sẵn như là một bản cập nhật yum rất đơn giản để cài đặt và không có cấu hình vì mặc định là hợp lý. Một imho không có trí tuệ.

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.