Php 我是否可以全局临时保存函数的返回数据?
如果我们有一个PHP函数,它根据特定的输入进行困难的计算,例如:Php 我是否可以全局临时保存函数的返回数据?,php,Php,如果我们有一个PHP函数,它根据特定的输入进行困难的计算,例如: function count_score($var1, $var2, $var3){ // based on $var1, $var2 and $var3 we run // a 5000-lines long calculation, // resulting in one $output return $output; } 现在,这里发生了什么: 该函数运行大约需要1秒 可能输入的$var1、$va
function count_score($var1, $var2, $var3){
// based on $var1, $var2 and $var3 we run
// a 5000-lines long calculation,
// resulting in one $output
return $output;
}
现在,这里发生了什么:
- 该函数运行大约需要1秒
- 可能输入的$var1、$var2和$var3组合不多(大约3000个)
编辑可选地,该方法应该在CRON中工作(没有http层),但它不是必需的。您可以将组合存储在数据库中,并在其中查找。因此,它在用户之间共享
如果修改了函数,则可以删除数据库。为什么不将组合/结果存储在一个数组中,json_encode()将其编码,然后写入一个文件。在需要时加载文件并进行json_decode()解码。您可以将临时数据保存在memcached中,只需执行以下操作:
$m = new Memcached();
$m->addServer('localhost', 11211);
$key = "count_score_result_{$var1}_{$var2}_{$var3}";
$result = $m->get($key);
if(!$result){
$result = count_score($var1,$var2,$var3);
$result = $m->set($key,$result,15000);
}
我建议三个简单的解决方案:
在我看来,APC是您的最佳解决方案。是的,这是一个解决方案。问题是每次调用函数时连接到数据库并获取结果是否是一个好主意。可能是的,除非有人提出另一个想法。你必须通过衡量哪个选项消耗更少的时间和资源来决定。每次或数据库查找和维护时调用该函数。您可以在每个会话中从SQL中提取一次,并将结果保存在会话变量中,以保存数据库调用。到目前为止,这似乎是最好的解决方案,在CRON中也能很好地工作。现在我想知道是否最好使用memcached,或者存储在SQL中,并为每个用户检索到$\u会话。有什么想法吗?memcached会比Sql快,它到底有多快?要么是我做错了什么,要么不是真的那么快。我已经在300次迭代中测试了它。不使用memcached需要0.2秒,使用memcached需要0.45秒。奇怪。。。