2016-05-22 5 views
5

У меня есть страница, выполняющая некоторые запросы REST с использованием Guzzle 6. Она отлично работает, однако иногда она замедляется, потому что она всегда делает запросы. Я узнал, что есть guzzle-cache-middleware, который должен кэшировать ответы удаленного API.PHP: Guzzle 6 + Guzzle-cache-middleware

Однако я не могу заставить его работать, мой код следует что-то вроде:

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

После запуска кода я не получаю никаких ошибок или предупреждений. Guzzle все равно дает мне ответ API, но ничего нового не появляется в /tmp/sitex.

Должен ли я установить что-либо после запроса для кэширования ответа? Существуют ли такие варианты, как установка TTL ответов?

Документация не объясняет ничего из этого, поэтому, если кто-то, кто испытал на Гузлле, может мне помочь, было бы хорошо. :)

+0

Я обнаружил, что использование PublicCacheStrategy это лучше для сервера кэширования ответов, которые реализуют соответствующие заголовки кэша –

ответ

5

мне удалось это исправить, заменив $stack->push( с:

$stack->push(
     new CacheMiddleware(
     new GreedyCacheStrategy(
      new FlysystemStorage(
      new Local("/tmp/sitex") 
     ), 
      180 
     ) 
    ), 
     "cache" 
    ); 
  • GreedyCacheStrategy: Всегда кэшировать ответ, не проверяя его заголовки для информации кэша;
  • 180 - это TTL, который мы хотим хранить в кэше.

Также замените use Kevinrob\GuzzleCache\Strategy\PrivateCacheStrategy; на use Kevinrob\GuzzleCache\Strategy\GreedyCacheStrategy;

Смежные вопросы