8

Guzzle 6 を使用していくつかの REST クエリを実行しているページがあります。正常に動作しますが、常にクエリを作成しているため、速度が低下することがあります。リモート API からの応答をキャッシュするはずの 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 を設定するようなオプションはありますか?

これを達成する方法についてのドキュメントはあまり明確ではありません。:)

4

1 に答える 1

10

次のものに置き換えること$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;

于 2016-05-22T20:45:15.600 に答える