正如标题所述,我是否理解缓存正确,如果是这样,有人知道任何资源可以帮助我弄清楚如何做到这一点吗?
细节:
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