php - 如何实现对来自 API(用 PHP 构建)的响应的缓存?
问题描述
我想缓存 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 询问您的数据库然后将数据与缓存数据进行比较以检查您的数据库数据是否更新是没有任何意义的。
事实上,整个操作的时间成本将比仅从源获取更长。
推荐阅读
- flutter - 在呈现数据的页面上持续轮询新数据的 Flutter 最佳实践?
- python - 如何正确安装yfinance
- typescript - 重复/交替函数参数
- winforms - 无法加载 System.Resources.Extensions - 在 .Net Framework 中
- python - 如何探索 PanNuke 数据集?
- reactjs - 在反应中使类全局可访问的正确方法是什么?
- html - 是否可以在 CSS 中的 ::after 伪类上处理鼠标移出?
- jquery - Jquery自动完成结果卡住了
- java - 在已运行的应用程序中从文件浏览器打开文件
- c# - 来自 String.IndexOf 的意外结果