2009-05-02 23 views
152

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

http://framework.zend.com/manual/en/zend.cache.backends.html#zend.cache.backends.twolevels ở đây được nói "sử dụng nhanh (nhưng hạn chế) như Apc, Memcache ... và" chậm "như File, Sqlite ..." bạn có nghĩ rằng sử dụng Apc là nhanh và Memcache như 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

+0

@porneL: ý của bạn là gì? APC có tăng tốc độ PHP chỉ sau khi cài đặt, ngay cả khi tôi không thêm mã vào bộ nhớ cache bất kỳ thứ gì trong các tập lệnh của tôi? –

+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 thêm trên đó. – Kornel

Trả lời

40

Ghi nhớ nếu bạn cần bảo tồn trạng thái trên một số máy chủ web (nếu bạn cân bằng tải và điều quan trọng là những gì trong bộ nhớ cache giống nhau đối với 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ớ rằng APC cũng có thể biên dịch và tăng tốc thời gian thực thi tập lệnh của bạn. Vì vậy, bạn có thể ví dụ được sử dụng APC để tăng hiệu suất thực hiện, trong khi sử dụng memcached để lưu trữ bộ nhớ cache.

+3

APC cũng có thể lưu bộ nhớ cache .... Hoặc? –

+7

Cập nhật năm 2014: PHP 5.5 sẽ tự nhiên bao gồm Zend Optimizer Plus (chỉ dành cho opcache, vì vậy không dành cho bộ nhớ cache của người dùng) và dường như APC sẽ không được phát triển ngoài PHP 5.4? Tuy nhiên hiện tại có APCu http://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

253

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

Nếu (và chỉ nếu) bạn có một ứng dụng web mà phải sống trên máy chủ web khác nhau (loadbalancing), bạn phải sử dụng memcache cho bộ nhớ đệm được phân phối. Nếu không, chỉ cần gắn vào APC và bộ nhớ cache của nó.

Bạn nên luôn sử dụng bộ đệm mã hóa opcode, APC (cũng là APC sẽ được tích hợp vào trong 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à bộ nhớ cache 'opcode' là gì? –

+4

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

+32

Bộ nhớ cache 'opcode' là một bộ biên dịch mã PHP thuần túy thành mã máy (" opcode ") và sau đó lưu nó vào biểu mẫu đã biên dịch cho các yêu cầu trong tương lai (cho đến khi nó 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. Nó 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). –

5

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

Tôi có một entry 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.info/blog/php/user-cache-timebomb.html (từ một trong những nhà phát triển APC tôi nghĩ rằng)

+22

Tôi tình cờ gặp vấn đề 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ư nó phải, 2 năm sau!). Đây là một báo cáo lỗi đóng, ví dụ: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529 –

8

tôi sử dụng cả một cho tốc độ và khác để đồng bộ hóa tất cả các máy chủ của tôi. Nếu bạn sử dụng memcache thì hãy ghi nhớ các cổng mở mà bạn sẽ cần phải chặn bằng iptables.

1

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

Và chỉ có 1 nơi để giám sát cả bộ nhớ cache .....

1

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

15

Ưu điểm chính của APC là bộ nhớ cache opcode. Kể từ khi 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à bản beta, 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ị hủy bỏ trong tương lai gần.

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

+4

Tôi đã dành hàng giờ trên web để suy nghĩ về nó, và tôi có cùng một kết luận. –

Các vấn đề liên quan