2016-05-22 28 views
5

Ich habe eine Seite einige REST-Abfragen mit Guzzle 6. Es funktioniert gut, aber manchmal wird es zu langsam, weil es immer Abfragen macht. Ich habe herausgefunden, dass es guzzle-cache-middleware gibt, die Antworten von der Remote-API zwischenspeichern soll.PHP: Guzzle 6 + Guzzle-Cache-Middleware

Allerdings kann ich nicht bekommen es meinen Code zu arbeiten, folgt etwas wie:

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", [ 
(...) 

Nach Ausführen des Codes ich keine Fehler oder Warnungen. Guzzle gibt mir immer noch die API-Antwort, aber nichts erscheint in /tmp/sitex.

Muss ich nach der Anfrage irgendetwas setzen, um die Antwort zwischenzuspeichern? Gibt es Optionen wie das Setzen der TTL der Antworten?

Die Dokumentation erklärt nichts davon, also wenn jemand auf Guzzle erfahren kann mir helfen, wäre es nett. :)

+0

ich gefunden habe, dass PublicCacheStrategy verwenden es für Caching-Server-Antworten besser ist, die richtigen Cache-Header implementieren –

Antwort

5

konnte ich dieses Problem beheben, indem $stack->push( mit dem Ersetzen:

$stack->push(
     new CacheMiddleware(
     new GreedyCacheStrategy(
      new FlysystemStorage(
      new Local("/tmp/sitex") 
     ), 
      180 
     ) 
    ), 
     "cache" 
    ); 
  • GreedyCacheStrategy: Immer die Antwort zwischenspeichern, ohne es Header für Cache-Informationen überprüft;
  • 180 ist die TTL wir wollen den Cache gespeichert haben.

ersetzen auch use Kevinrob\GuzzleCache\Strategy\PrivateCacheStrategy; von use Kevinrob\GuzzleCache\Strategy\GreedyCacheStrategy;