我正在运行 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;
}
任何帮助/指针表示赞赏!