我有这个功能:
function dist($addr, $addr2){
$url = 'https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins='.urlencode($addr).'&destinations='.urlencode($addr2).'&key=<key>';
$json = curl_download($url);
//$json = preg_replace('/^\xEF\xBB\xBF/', '', $json);
$array = json_decode($json, TRUE);
return $array['rows'][0]['elements'][0]['distance']['text'];
}
使用google api计算两个位置之间的距离。该函数每次调用通常需要0.3-0.6秒。所以我想做的是“缓存”结果,所以不需要每次都调用url?将结果和搜索条件放在DB中是最好的方法吗?然后在使用函数
之前检查它们是否在DB中如何加快搜索速度并尽可能快地加载页面?
答案 0 :(得分:0)
这是现实吗?我不知道您的应用程序的用途,但如果用户可以输入任何地址,则会有一个接近无限的距离列表。这种繁重计算的平均等待时间平均为半秒,速度极快。挖掘数据库中的数百万条记录比API调用花费更多时间。
但是,如果通常使用相同的参数(因此地址)调用此方法,则设置一个小数据库甚至是具有该结果的JSON文件可能不是一个坏主意。 JSON比MySQL快很多,所以如果你真的需要缓存结果,我会使用它。
答案 1 :(得分:0)
我们倾向于使用name/key value
商店来做类似的事情。
您有一个表,它只存储请求参数和返回响应。
Key1 | Key2 | Value |
POSTCODE1 | POSTCODE2 | {response from google} |
现在,在您进行谷歌搜索之前,先检查此表,如果存在,只需使用响应即可。如果它不存在,那么进行查找,并将其存储在数据库中。
我应该指出,我相信Google在他们的ToS中说你不应该缓存这些数据。
答案 2 :(得分:0)
你可以将结果保存在Redis(http://redis.io/)中这是一个内存中的数据库Ram,速度很棒。 :d