【发布时间】:2021-02-16 01:31:38
【问题描述】:
我想缓存 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();
}
}
?>
【问题讨论】:
-
您需要实现另一个函数来使该缓存条目无效。当您知道employees 表的内容已更新时,请调用通常会执行 $CacheString = $InstanceCache->getItem($key); 的其他函数。 $CacheString->set(null); $InstanceCache->保存($CacheString);
-
感谢您的回复。是的...我知道必须实现新的失效功能,但我怎么知道员工表已更新?我需要发送旗帜吗?如果是,我该怎么做?
标签: php api caching redis phpfastcache