PHP - aprox的Memcache。 20k小字符串 - 内存不足

时间:2018-01-02 15:03:36

标签: php memcached

我用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。

0 个答案:

没有答案