PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


APCu: Der neue User-Cache

with 6 comments

Speziell für PHP 5.5 gibt es die User-Cache-Extension APCu: Seit PHP 5.5 ist der Bytecode-Cache OpCache enthalten, die bisher genutzte Extension APC wird dann nicht mehr benötigt. Doch wer APC nicht nur wegen seiner Bytecode-Cache-Fähigkeit installiert sondern auch die User-Cache-Funktionen genutzt hat, kann jetzt die abgespeckte Erweiterung APCu nutzen, in der alle Bytecode-Funktionen entfernt wurden.

(Wer die Upload-Progress-Funktionen von APC genutzt hat, kann nun die eingebauten Session-Upload-Progress-Funktionen nutzen, aber das ist ein anderes Thema)

Die relativ schlanke Extension APCu (GitHub-Repository), in der nur noch die übrig gebliebenen Funktionen wie z.B. apc_store() und apc_fetch() enthalten sind, wurde dann noch etwas verbessert. Vorher war das unmöglich da die komplizierte große APC-Extension nur schwer wartbar war.

Die Version 4.0.1 von APCu sollte unbedingt vermieden werden da sie nicht APC-kompatibel ist, es gab da einen Bug. Also 4.0.0 oder besser >=4.0.2 verwenden. Die Installation ist denkbar einfach. Falls PHP 5.5 über das Paketmanagement von Ubuntu installiert wurde reicht ein einfaches:

sudo apt-get -V install php5-apcu

Oder via PECL installieren:

sudo pecl install APCu-beta
sudo -i
echo "extension=apcu.so" > /etc/php5/mods-available/apcu.ini
ln -s /etc/php5/mods-available/apcu.ini /etc/php5/conf.d/20-apcu.ini

Oder selbst kompilieren aus dem GitHub-Repository:

git clone https://github.com/krakjoe/apcu.git
cd apcu
pecl package package.xml
sudo pecl install -f apcu-4.0.2.tgz
echo "extension=apcu.so" > /etc/php5/mods-available/apcu.ini
ln -s /etc/php5/mods-available/apcu.ini /etc/php5/conf.d/20-apcu.ini

Danach nicht vergessen den Webserver/FPM neu zu starten. Mit einem kleinen Testscript kann man dann feststellen ob die User-Cache-Funktionen wie erwartet funktionieren:

<?
$var = apc_fetch('testvar');

if ($var===false) $var=0;
echo $var;

apc_store('testvar', ++$var);

Bei jedem Refresh der Seite zählt der Zähler hoch.

Der Vollständigkeit halber sollte noch erwähnt werden dass es noch eine Alternative zu APCu gibt: Yac (Yet another Cache). Diese neue Extension ist schneller als APCu, aber nicht kompatibel, sodass man alle apc_* Funktionen ändern muss. Dafür erhält man einen User-Cache ohne Locks, der aber laut Autor noch nicht in Produktionsumgebungen genutzt werden sollte. Wer aber das letzte bischen Performance braucht, kann sich Yac mal anschauen.

Written by Michael Kliewe

Dezember 14th, 2013 at 4:15 pm

Posted in PHP

Tagged with , , , ,

6 Responses to 'APCu: Der neue User-Cache'

Subscribe to comments with RSS or TrackBack to 'APCu: Der neue User-Cache'.

  1. Das letzte mal, als ich die Benchmarks zu Yac gesehen habe, waren die sehr direkt auf Yac zugeschnitten. Wenn ich mich recht erinnere hatten sie für die Benchmarks Keys gewählt, mit denen APC Probleme hat, so dass es eben schlechter abschnitt. Auf mich wirkt das nicht sehr vertrauenswürdig

    https://github.com/laruence/yac/issues/7

    KingCrunch

    14 Dez 13 at 20:44

  2. […] als Bytecode-Cache und auch als lokalen Usercache. Nun wechseln wir weg von APC hin zu OpCache und APCu. Da wir dort die meisten Probleme erwarteten mußten wir dies besonders gut testen, denn in den […]

  3. Danke Dir für die kurze Anleitung! Leider hat Ubuntu genau die 4.0.1 in den Repos, so das ich über pecl gehen musste.
    Zunächst schlug das kompilieren fehl, aber ein „apt-get install libpcre3-dev“ brachte Abhilfe. Jetzt rennt der Cache und die Tests können beginnen 🙂

    Martin

    2 Apr 14 at 00:56

  4. […] zu speichern, prüfen und wieder auszulesen, dann wird auch alles wieder gut, einfach das Paket php5-apcu […]

  5. […] Dies wird durch den ZendOP Code Cache erreicht. Zusätzlich benutzt der GRC die so genannte APCu Technologie. Diese ermöglicht es alle benutzerbezogenen Daten in einem separaten Speicher abzulegen. So wird […]

  6. […] found this. But I need a solution for […]

Leave a Reply

You can add images to your comment by clicking here.