gpt4 book ai didi

php - 如何实现对来自 API(用 PHP 构建)的响应的缓存?

转载 作者:行者123 更新时间:2023-12-03 06:44:24 26 4
gpt4 key购买 nike

我想缓存 API 响应,以便减少对 API 服务器的请求数。 API 是使用 Zend 框架用 PHP 编写的。
我的方法:我创建了一个redis集群,并使用phpfastcache连接到redis集群。使用 phpfastcache,我们只能设置缓存响应的过期时间。
每当响应在缓存到期之前更新时,我们都会使用上述方法获得较旧的响应。期望的是,每当更新响应时,必须清除旧缓存并且必须使用相同的键写入新缓存。
我附上了我使用的示例脚本。
如果有人可以为此提供解决方案,那就太好了。
提前致谢。
代码:

<?php
// phpfastcache is a package used for caching
use Phpfastcache\CacheManager;
use Phpfastcache\Drivers\Redis\Config;

require //path for composer autoloader;

#InstanceCache must be global
$InstanceCache = CacheManager::getInstance('redis', new Config([
'host' => 'IP_address',
'port' => 6379,
'password' => //password
'database' => //db_name
]));

public function function_name(parameter){
$key = "unique_name";
$CacheString = $InstanceCache->getItem($key);

if(is_null($CacheString->get())){
$sql="SELECT * FROM employees";//sql query for function_name
$res=$this->db_query($sql);
if($this->db_num_rows($res)==0):
$this->db_free_results($res);
else:
$row = $this->db_fetch_object($res);
$this->db_free_results($res);
endif;
$CacheString->set($row)->expiresAfter(/*time*/);
$InstanceCache->save($CacheString);

echo $CacheString->get();
}
else{
echo $CacheString->get();
}
}


?>

最佳答案

就像我在 Github 上告诉你的那样,我认为您误解了缓存的概念本身。
概念缓存意味着您将数据缓存为所需的 TTL。
如果您需要最新的数据,那么您必须从源(您的数据库在此处)重新获取。
缓存不是动态的,而是静态的,可以帮助你冷却后端的请求。
因此,在您的情况下,只需从源代码中获取而不进行缓存,它会很好。每次要求 Phpfastcache 询问您的数据库然后将数据与缓存数据进行比较以检查您的数据库数据是否更新是没有任何意义的。
事实上,整个操作的时间成本将比仅从源获取更长。

关于php - 如何实现对来自 API(用 PHP 构建)的响应的缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64661704/

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