当相同的post参数相同时,缓存和获取php的输出


Cache and fetch output from php when same POST-parameters are the same

正如标题所述,我是否理解缓存正确,如果是这样,有人知道任何资源可以帮助我弄清楚如何做到这一点吗?

细节:

php脚本调用一些post参数,反过来调用API并输出结果,我想缓存这些结果,以便如果相同的post参数组合被调用两次,它从缓存中取出,避免再次调用API。

凭借我有限的知识,我可以想到一个会话数组解决方案,从标准的角度来看,这是合理的吗?

关于参数组合:问自己是否允许两个用户看到相同的结果,因为您保存(稍后检索)缓存的键将由您所说的输入参数组成。键必须是唯一的,原因很明显,您不希望显示另一组输入变量的缓存数据。

问题是,你是否需要键是

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

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

足够吗?(内爆$_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