Memcached vs APC hangisini seçmeliyim? [kapalı]


161

Bu makaleyi okudum: http://www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ geri geldiğinde .. Uygulamamın gerçekten hızlı olması için en iyi önbellek motorunu almak istiyorum. Tabii ki aşırı önbellek istemiyorum ama en azından orada en iyi şeyi seçmek istiyorum. Bu makalede, Memcached'in yavaş ve apc hızlı olduğu neden herkes memcached'i seçiyor ?

http://framework.zend.com/manual/tr/zend.cache.backends.html#zend.cache.backends.twolevels burada "Apc, Memcache gibi hızlı bir (ancak sınırlı) kullanın ... ve File, Sqlite gibi bir "yavaş" ... hızlı olarak Apc ve yavaş olarak Memcache kullanmak iyi bir fikir mi sizce?


14
BTW: Kullanmasanız bile APC kullanmalısınız apc_store. Opcode önbellek tek başına PHP'yi birkaç kat daha hızlı yapar.
Kornel

@porneL: ne demek istiyorsun? Komut dosyalarında herhangi bir şey önbelleğe kod eklemesem bile APC sadece kurulumdan sonra PHP hızını artırır mı?
Marco Demaio

5
@Marco Demaio: Gerçekten. APC esas olarak bir PHP optimize edicisidir (etkinleştirildiği sürece varsayılan olarak optimize eder) ve apc_store()bunun üzerine ekstra bir bonus.
Kornel

3
2014'te, yalnızca 1 sunucuda önbellekleme için kullanıyorsanız APCu'ya gidin.
Flion

Yanıtlar:


268

Memcached dağıtılmış bir önbellek sistemidir, oysa APC dağıtılmaz - ve esas olarak bir opcode önbellektir.

Farklı web sunucularında (yük dengeleme) yaşamak zorunda olduğunuz (ve yalnızca) bir web uygulamanız varsa, dağıtılmış önbellekleme için memcache kullanmanız gerekir. Değilse, APC'ye ve önbelleğine sadık kalın.

Her zaman APC olan bir opcode önbellek kullanmalısınız (ayrıca APC php6 iirc'e entegre edilecektir, neden şimdi kullanmaya başlamıyorsunuz).

Her ikisini de farklı amaçlar için kullanabilirsiniz / kullanmalısınız.


5
Çarpıcı cevap +1. Şimdi sorum opcodeönbellek nedir?
Marco Demaio

4
@Karsten Durumlarını korumanız / paylaşmanız gerekmediği sürece farklı sunucularınız varsa (bulut yükü dengelenmiş bir ortam gibi), APC de düz bir bellek önbelleği olarak iyi çalışır - ancak her biri için en uygun olmayabilir bulut örneği kendi önbelleğini ısıtmak zorunda kalacak ...
Ray

35
opcodeÖnbellek, düz PHP kodunu makine koduna ("opcode") derleyen ve daha sonra gelecekteki istekler için (orijinal PHP dosyasının değiştiğini algılayana kadar) derlenmiş biçimde saklayan bir önbellektir. Bu, PHP'nin her derleme adımında bu derleme adımını çalıştırması gerekmediği ve biraz zaman kazandıracağı anlamına gelir. Hızlı bir site (diğerlerinin yanı sıra) sağlamaya yardımcı olmanın yollarından sadece biridir.
Simon Doğu

2
Diyagramlar ve karşılaştırmalı değerlendirmelerle bazı farklılıkları açıklayan ilginç bir slayt gösterisi var: slideshare.net/FordAntiTrust/php-performance-with-apc-memcached
Simon East

1
Memecched, APC yerine dağıtılmamış sistemde kullanılabilir mi? Gelecekte daha fazla makineniz olacaksa, sadece bir tane tutmak iyi olacaktır. sağ? Veya ikisini de, biri opcode diğeri de genişletilebilir önbellek için mi kullanıyorsunuz?
Adib Aroui

43

Birden fazla web sunucusunda durumu korumanız gerekiyorsa (önbelleğe yüklüyseniz ve önbellekteki içeriğin tüm sunucular için aynı olması önemlidir).

Bir (veya her) sunucuda okumak (ve yazmak) için hızlı belleğe erişmeniz gerekiyorsa APC.

APC'nin komut dosyası yürütme süresini de derleyebileceğini ve hızlandırabileceğini unutmayın. Böylece, örneğin önbellek depolaması için memcached kullanırken artan yürütme performansı için APC kullanıyor olabilirsiniz.


3
APC depolamayı da önbelleğe alabilir .... Veya?
mr_app

7
2014 güncellemesi: PHP 5.5 doğal olarak Zend Optimizer Plus'ı içerecektir (bu sadece opcache içindir, bu yüzden kullanıcı önbelleği için değil) ve APC PHP 5.4'ün ötesinde geliştirilmeyecek gibi görünüyor? Ancak şimdi APC'nin pecl.php.net/package/APCu var , bu sadece APC'nin kullanıcı önbellek parçalarını aldı
Flion

18

APC'nin ana avantajı opcode önbellektir. PHP 5.5, OpCache'yi çekirdeğine ve PHP 5.4 için APC'ye entegre ettiğinden hala beta olarak işaretlendiğinden, resmi bir açıklama değildir, ancak APC'nin gelişimi yakın gelecekte düşecektir.

Bu yüzden Memcached'ı seçmenizi tavsiye ederim.


5
Bunu düşünmek için internette saatler geçirdim ve aynı sonuca sahibim.
Nicolas Zozol

9

İkisini de hız için, diğerini tüm sunucularımı senkronize etmek için kullanıyorum. Memcache kullanıyorsanız, lütfen iptables ile engellemeniz gereken açık portları unutmayın.


6

Hey Thomaschaaf, umarım bu sizin için geç bir araç değildir, ancak APC'nin "kullanıcı önbelleği" ile ilgili bazı sorunları olduğunu lütfen unutmayın. Uzun bir hikaye kısaltmak için, önbellek girişleri için zaman aşımı süreleri ayarladığınızda veya apache'niz dahili APC kodu (örneğin zaman aşımı) içinde çökerse, bazı sorunlarınız olabilir.

Sorunla ilgili bir girişim var: http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.html ve ayrıca http: //t3.dotgnu. info / blog / php / user-cache-timebomb.html (sanırım APC geliştiricilerinden birinden)


22
Bunu tökezledim ve şimdi ele alındığı anlaşılıyor (2 yıl sonra olması gerektiği gibi!). İşte kapalı bir hata raporu, örneğin: bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529
Shane H

1

APC bir kod önbelleği olduğundan ve memcache gibi davrandığından sadece APC kullanıyorum! 2 yerine yalnızca 1 yapılandırma dosyası.

Ve her iki önbelleği izlemek için sadece 1 yer .....


1

Ne yaptığınıza bağlıdır, ancak bir VPS üzerinde çalışan drupal web sitelerim için APC'nin harika çalıştığını görüyorum! CentOS 6 çalıştırıyorsanız, yüklemek çok basit bir yum güncellemesi olarak mevcuttur ve varsayılan olarak hiçbir yapılandırma makul değildir. Hayır beyinsiz imho.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.