我用memcache创建了简单的代码
function CreateMemcacheName()
{
//lat and lon are latitude and longitude of place
//user can not directly change this - it is passed from image URL
//embeded in HTML site
$lat = intval($_GET['lat'] * 100);
$lon = intval($_GET['lon'] * 100);
return "data_{$lat}_{$lon}";
}
function LoadData($memcache)
{
$name = CreateMemcacheName(); //crate unique name based on URL params
if (is_null($memcache) == false)
{
$data = $memcache->get($name);
if ($data !== false)
{
return $data;
}
}
$data = DownloadDataFromAPI();
//data are around 10kb
if (is_null($memcache) == false)
{
$memcache->set($name, $data, 0, 1 * 60 * 60);
}
return $data;
}
$memcache = new Memcache();
if ($memcache->connect('127.0.0.1', 11211))
{
$data = $this->LoadData($memcache);
}
为访问该网站的每个用户调用此代码。大约有20k种组合,可以来自CreateMemcacheName
。如果我使用它,服务器很快就会耗尽内存。没有内存缓存,所有内容都运行正常,但DownloadDataFromAPI
经常被调用,导致我拥有的API资源耗尽。
但是,当我计算最大值时大小(20k * 10kb)远低于我的服务器空闲内存。那么,我应该改进什么?或者使用带有我自己的时间戳的数据库来指示旧数据而不是memcache。