当相同的POST参数相同时,从php缓存和获取输出
正如标题所述,我是否正确理解了缓存,如果是这样,是否有人知道任何可以帮助我了解如何做到这一点的资源 详情: php脚本是用一些POST参数调用的,这些POST参数反过来调用API并输出结果,我希望缓存这些结果,这样,如果两次调用相同的POST参数组合,它将从缓存中提取并避免再次调用API当相同的POST参数相同时,从php缓存和获取输出,php,api,caching,Php,Api,Caching,正如标题所述,我是否正确理解了缓存,如果是这样,是否有人知道任何可以帮助我了解如何做到这一点的资源 详情: 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