2013-06-28 14 views
28

PHP 5.5 include zend opcache per impostazione predefinita, che in pratica significa che quasi nessuno utilizzerà APC.Cosa usare al posto della cache di dati utente apc in php 5.5?

Ma cosa usare invece della parte cache dati utente di APC (apc_store & apc_fetch & simile)?

Un caso di utilizzo in cui mi piace molto usare la cache di dati utente APC sono "versioni" di risorse statiche (javascript, css ..). Ogni volta che faccio riferimento a un file statico, aggiungo l'hash del suo contenuto nell'url (ad esempio < script src =/script.js > diventerà < script src =/script.js? V = hash >), in modo che il browser utilizzi sempre la versione corrente e può memorizzarlo in modo permanente.

Posso immaginare di usare redis o memcache per archiviare gli hash dei file statici, ma sembra sciocco chiedere un altro processo sulla rete o sul socket solo per ottenere un hash del contenuto del file. La cache dei dati utente di APC (che è nella memoria condivisa e l'accesso è quasi veloce come l'accesso alla variabile php) sembra la cosa giusta da usare per questi dati.

Quindi la domanda è: cosa usare in PHP 5.5 per memorizzare piccoli bit di dati anziché APC?

+8

Utilizzare APCu, che è solo la parte cache utente di APC. – NikiC

risposta

28

A partire da PHP 5.5 l'archiviazione dei dati utente APC viene impacchettata separatamente come PECL APCu. Codice

Ciò consente di utilizzare all user cache functions, ad esempio apc_store(). Restituirà anche true per extension_loaded('apc') - questo significa che tutte le librerie dipendenti da APC funzioneranno in modo simile a PHP 5.4.

+0

yum install php5-pecl-apcu -> nessun pacchetto disponibile – Flion

+1

@FlyOn hai ragione. Grazie! Ho corretto il nome del pacchetto per Fedora/Redhat ... –

+1

Grazie !! Avrei usato opcache ma il repository su cui sto lavorando ha bisogno di apc. Risparmiatore di vita proprio qui. –

6

Recentemente ho affrontato questo problema dopo l'aggiornamento da PHP 5.3 a PHP 5.5 beta 2.

ho guardato Memcache e Redis. A seconda di chi chiedi, le prestazioni tra i due sono all'incirca uguali. Alcuni affermano che Redis è leggermente più veloce. Tuttavia, Redis ha molte più funzionalità di Memcahe, quindi ho deciso di andare con Redis.

Per un client PHP, ho scelto Phpredis su Predis. Phpredis è un'estensione C mentre Predis è una pura implementazione PHP. Quindi, Phpredis è generalmente più veloce.

Principalmente uso Redis per memorizzare e recuperare oggetti serializzati. Ho iniziato il progetto che sto attualmente sviluppando in PHP 5.3 con APC. Sto continuando a sviluppare il progetto con php 5.5 e Redis. Anche se non ho statistiche di benchmark, posso dirti che l'app "sente" più velocemente. Ciò è probabilmente dovuto a miglioramenti delle prestazioni in php 5.5 rispetto ai cache utente APC versetti Redis. Ad ogni modo, sono felice della mia scelta.

Spero che questo aiuti. Buona fortuna e felice hacking :-)

-1

Dai un'occhiata a XCache opcode cacher, dagli autori di lighttpd. Supporta sia php 5.5 che cache dei dati utente: http://xcache.lighttpd.net/wiki/XcacheApi

Non l'ho provato da solo (utilizzando ancora APC e php 5.4).

+0

Cosa c'è di sbagliato nel suggerimento di XCache? – DamirR

0

Niente di più da dire. Hai già la risposta corretta. I guesy posso fornire un link per tutorial per come scaricare ed installare APCu su XAMPP su Windows per PHP 5.5 e 5.6:

link non scaricare APCu per PHP costruire da 5.3 e superiori: download APCu different versions

installazione tutorial:instalatioiin instrucions (la nuova versione dovrebbe essere in fondo alla lista dei file - utilizzare questo)

anche tenere a mente che si avranno due da scegliere alcune opzioni come 64 o 84 versione così come nti o TS e VC9 o VC11 (che può essere diverso nel tuo caso) e naturalmente la versione corect php (nel mio caso che sarebbe PHP 5.6 per la mia xampp).

ESEMPIO:

se si vuole prendere a destra devi correre phpinfo() prima e verificare la presenza di tali parametri:

Zend Estensione Costruire e Architettura

In Il mio caso sarebbe:

[Zend Extension Build:] API220131226,TS,VC11 

[Architecture:] x86 

Ciò significa che nel mio caso avrei dovuto scegliere ACLU wchich contiene nel nome del file quei parametri 5.6, TS, VC11, 86

nome del file da scaricare: php_apcu-4.0. 7-5.6-ts-vc11-x86.zip

Spero che chiarisca le cose per te.


Alcune spiegazioni adizionale su diversi PHP build:

differenza ts vs NTS: TS si riferisce al multithread in grado costruisce. NTS fa riferimento a build con solo thread singolo. Il caso d'uso per i binari di TS implica l'interazione con un SAPI multithread e PHP caricato come modulo in un server web. Per i binari NTS il caso d'uso diffuso è l'interazione con un server web attraverso il protocollo FastCGI, che non utilizza il multithreading (ma anche per esempio la CLI).

differenza VC9 vs VC11 vs VC14: più recenti versioni di PHP sono costruite con VC9, VC11 o VC14 (Visual Studio 2008, 2012 o 2015 del compilatore rispettivamente) e comprendono i miglioramenti in termini di prestazioni e stabilità.

  • Il VC9 costruisce richiedono di avere il Visual C++ Redistributable per Visual Studio 2008 SP1 x86 o x64 installati
  • Il VC11 costruisce bisogno di avere il Visual C++ Redistributable per Visual Studio 2012 x86 o x64 installato
  • il VC14 costruisce bisogno di avere il Visual C++ Redistributable per Visual Studio 2015 x86 o x64 installato

differenza 86 vs 64: la x64 build di PHP per Wind ows deve essere considerato sperimentale e non fornisce ancora il numero intero a 64 bit o il supporto di file di grandi dimensioni.