我使用Guzzle 6进行一些REST查询。它运行正常,但有时它会变慢,因为它总是在进行查询。我发现有guzzle-cache-middleware应该缓存来自远程API的响应。
但是我无法使用它,我的代码如下:
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等选项?
文档没有解释任何这些,所以如果有经验的Guzzle可以帮助我,那就太好了。 :)
答案 0 :(得分:6)
我设法通过将$stack->push(
替换为:
$stack->push(
new CacheMiddleware(
new GreedyCacheStrategy(
new FlysystemStorage(
new Local("/tmp/sitex")
),
180
)
),
"cache"
);
同时将use Kevinrob\GuzzleCache\Strategy\PrivateCacheStrategy;
替换为use Kevinrob\GuzzleCache\Strategy\GreedyCacheStrategy;