gpt4 book ai didi

PHP:Guzzle 6 + Guzzle 缓存中间件

转载 作者:可可西里 更新时间:2023-11-01 14:00:51 27 4
gpt4 key购买 nike

我有一个页面使用 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 之类的选项?

关于如何实现这一点的文档不是很清楚,所以如果有经验的人可以帮助我,那就太好了。 :)

最佳答案

我设法通过将 $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;

关于PHP:Guzzle 6 + Guzzle 缓存中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37378092/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com