当相同的POST参数相同时,从php缓存并获取输出

时间:2011-09-12 19:06:03

标签: php api caching

正如标题所述,我是否理解了缓存是否正确,如果是这样,任何人都知道任何可以帮助我弄清楚如何执行此操作的资源。

详细说明:

使用一些POST参数调用php脚本,然后调用API并输出结果,我想缓存这些结果,这样如果调用相同的POST参数组合两次,则从缓存中获取并避免进行另一次API调用。

由于我的知识有限,我可以想到一个会话阵列解决方案,从一个预先设定的观点来看,这是否合理?

1 个答案:

答案 0 :(得分:0)

关于参数组合:问问自己是否允许两个用户看到相同的结果,因为保存(以及稍后检索)缓存的密钥将包含您所说的输入参数。由于显而易见的原因,密钥需要是唯一的,您不希望显示另一组输入变量的缓存数据。

问题是,你需要关键是

$cache_key = 'search_external_api_user_53'.implode(',', $_POST);

或是

$cache_key = 'search_external_api'.implode(',', $_POST);

足够? (Imploding $_POST只是一个例子,但它应该包含用户数据。)

脚注:您无法共享标准会话($_SESSION),而是可以将数据保存在文件或内存中(如APC或memcached)。保存文件非常简单:

function save_cache_in_file($cache_key, $content) {
    $cache_key = md5($cache_key);
    file_put_contents('/tmp/'.$cache_key, serialize($content);
}
function get_cache_from_file($cache_key) {
    $cache_key = md5($cache_key);
    if(!file_exists('/tmp/'.$cache_key)) {
        return false;
    }
    return unserialize(file_get_contents('/tmp/'.$cache_key));
}
// usage
$cache_key = 'my_search'.implode(',', $_POST);
if(!$data_from_external_service = get_cache_from_file($cache_key)) {
    $data_from_external_service = getDataFromElsewhere();
    save_cache_in_file($cache_key, $data_from_external_service);
}
// here, $data_from_external_service is always available and cached