Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当相同的POST参数相同时,从php缓存和获取输出_Php_Api_Caching - Fatal编程技术网

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

当相同的POST参数相同时,从php缓存和获取输出,php,api,caching,Php,Api,Caching,正如标题所述,我是否正确理解了缓存,如果是这样,是否有人知道任何可以帮助我了解如何做到这一点的资源 详情: php脚本是用一些POST参数调用的,这些POST参数反过来调用API并输出结果,我希望缓存这些结果,这样,如果两次调用相同的POST参数组合,它将从缓存中提取并避免再次调用API 根据我有限的知识,我可以想出一个会话阵列解决方案,从普雷斯坦达的角度来看,这是否合理?关于参数组合:问问自己,是否允许两个用户看到相同的结果,因为保存(以及稍后检索)缓存的键将由您所说的输入参数组成。由于明显的

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

详情:

php脚本是用一些POST参数调用的,这些POST参数反过来调用API并输出结果,我希望缓存这些结果,这样,如果两次调用相同的POST参数组合,它将从缓存中提取并避免再次调用API


根据我有限的知识,我可以想出一个会话阵列解决方案,从普雷斯坦达的角度来看,这是否合理?

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

问题是,你需要钥匙吗

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

足够吗?(内爆
$\u POST
只是一个例子,但它应该由用户数据组成。)

脚注:您不能共享标准会话(
$\u 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

你到底在找什么?您将在会话中保存哪些类型的数据?您希望保持的衡量绩效是什么?缓存对您有什么好处?这不是一个建设性的问题,它将征求意见。如果你有一些难以回答的事实,那么你可能会得到一个切中要害的答案就足够了,因此缓存文件脚本是一个很好的工具solution@Joseph:好的,现在你知道关键了,但是还有很多方法可供选择(这是我知道的最简单的方法)。例如,可以随意阅读关于灵感的文章。我的答案是+1:你需要说缓存将持续多长时间=何时使其失效。这真的很重要。
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