【问题标题】:How to implement caching of responses from API's( built with PHP)?如何实现对来自 API(用 PHP 构建)的响应的缓存?
【发布时间】: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


【解决方案1】:

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

如果您需要最新数据,则必须从源(此处为您的数据库)重新获取。

缓存不是动态的,而是静态的,可以帮助你冷却后端的请求。

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

实际上整个操作的时间成本会比只从源获取更长。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-29
    • 2011-01-27
    • 2019-09-05
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    相关资源
    最近更新 更多