0

我正在运行 memcached,我的应用程序正在使用 php libmemcached。

代码本身是一个简单的检查键是否存在,如果不是从 mysql 数据库中提取新的,具有“x”的到期时间。

我有一个从mysql中提取的数据数组,它通过另一种方法作为数组返回-它存储在键'menudata_array'下的memcached中。一切都很好,直到我注意到有时菜单数据从缓存方法返回为空或空???

我拥有的唯一信息是,当菜单数据返回空|空时,错误周期等于 120 秒的到期超时?之后,下一个数据请求返回正常。

我确定我在这里误解了一些东西!

代码如下:

function getMenuData()
{

$menudata_array = array(); //init an empty array

$memcache = getMemcache();  //method returns an instance of memcache (global) or false is failure

if($memcache)
{
    //get from memcache
    $menudata_array = $memcache->get('menudata_array');

     //make sure something was returned
     if($menudata_array === false)
     {

     $menudata_array = generate_menu_array(); // get from mysql db
     $expire_seconds = 120;
     $refresh = $memcache->add('menudata_array', $menudata_array, false, $expire_seconds);
     if($refresh === false)
    {
    //key already exists so replace instead ...
    $memcache->replace('menudata_array', $menudata_array, false, $expire_seconds);
    }

 } 

}
else
{
    //memcache not available|down... get from mysql db instead
    $menudata_array = generate_menu_array();

}


//i added this line to track when this problem was happening ...
if(!$menudata_array || count($menudata_array)<=0)
{
         logError();
}

return $menudata_array;

}

任何帮助/指针表示赞赏!

4

0 回答 0