2016-05-22 23 views
5

Ho una pagina che fa alcune query REST usando Guzzle 6. Funziona bene, ma a volte rallenta perché fa sempre delle query. Ho scoperto che c'è guzzle-cache-middleware che dovrebbe memorizzare nella cache le risposte dall'API remota.PHP: Guzzle 6 + Guzzle-cache-middleware

Tuttavia non riesco a farlo funzionare, il mio codice segue qualcosa di simile:

use GuzzleHttp\Client; 
use GuzzleHttp\HandlerStack; 
use League\Flysystem\Adapter\Local; 
use Kevinrob\GuzzleCache\CacheMiddleware; 
use Kevinrob\GuzzleCache\Strategy\PrivateCacheStrategy; 
use Kevinrob\GuzzleCache\Storage\FlysystemStorage; 

(...) 

$stack = HandlerStack::create(); 
$stack->push(
    new CacheMiddleware(
    new PrivateCacheStrategy(
     new FlysystemStorage(
     new Local("/tmp/sitex") 
    ) 
    ) 
), 
    "cache" 
); 


// Request 
$client = new Client([ 
    "handler" => $stack, 
    "base_uri" => "http://..., 
    "timeout" => 2.0, 
]); 

$response = $client->request("GET", "/posts", [ 
(...) 

Dopo aver eseguito il codice non ottengo eventuali errori o avvisi. Guzzle mi dà ancora la risposta API, tuttavia non appare nulla di nuovo in /tmp/sitex.

Devo impostare qualcosa dopo la richiesta di memorizzare la risposta nella cache? Ci sono opzioni come l'impostazione del TTL delle risposte?

La documentazione non spiega nulla di tutto ciò, quindi se qualcuno esperto su Guzzle può aiutarmi sarebbe bello. :)

+0

ho trovato che utilizzando PublicCacheStrategy è meglio per le risposte del server di caching che implementano le intestazioni di cache corrette –

risposta

5

sono riuscito a risolvere il problema sostituendo $stack->push( con:

$stack->push(
     new CacheMiddleware(
     new GreedyCacheStrategy(
      new FlysystemStorage(
      new Local("/tmp/sitex") 
     ), 
      180 
     ) 
    ), 
     "cache" 
    ); 
  • GreedyCacheStrategy: memorizzare nella cache sempre la risposta senza controllare che sia le intestazioni di informazioni di cache;
  • 180 è il TTL che vogliamo memorizzare la cache.

sostituire anche use Kevinrob\GuzzleCache\Strategy\PrivateCacheStrategy; da use Kevinrob\GuzzleCache\Strategy\GreedyCacheStrategy;

Problemi correlati