我希望缓存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();
}
}
?>发布于 2020-11-04 06:46:40
就像我在Github上告诉你的那样,我认为你误解了缓存的概念本身。概念缓存意味着您可以缓存所需TTL的数据。
如果您需要最新的数据,那么您必须从源(这里是您的数据库)重新获取数据。
缓存并不意味着它是动态的,它意味着它是静态的,它可以帮助你在后端冷却请求。
因此,在您的情况下,只需从源获取而不缓存,这将是很好的。要求Phpfastcache每次都询问您的数据库,然后将数据与缓存的数据进行比较,以检查数据库数据是否更新,这是没有任何意义的。
事实上,整个操作的时间开销将比仅从源代码获取要长。
https://stackoverflow.com/questions/64661704
复制相似问题