首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现来自API的响应缓存(用PHP构建)?

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

Stack Overflow用户
提问于 2020-11-03 19:10:33
回答 1查看 441关注 0票数 1

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

代码语言:javascript
复制
<?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();
    }
}


?>
EN

回答 1

Stack Overflow用户

发布于 2020-11-04 06:46:40

就像我在Github上告诉你的那样,我认为你误解了缓存的概念本身。概念缓存意味着您可以缓存所需TTL的数据。

如果您需要最新的数据,那么您必须从源(这里是您的数据库)重新获取数据。

缓存并不意味着它是动态的,它意味着它是静态的,它可以帮助你在后端冷却请求。

因此,在您的情况下,只需从源获取而不缓存,这将是很好的。要求Phpfastcache每次都询问您的数据库,然后将数据与缓存的数据进行比较,以检查数据库数据是否更新,这是没有任何意义的。

事实上,整个操作的时间开销将比仅从源代码获取要长。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64661704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档