问题源于使用此:
$list = array();
$allSlabs = $memcache->getExtendedStats('slabs');
foreach ($allSlabs as $server => $slabs)
foreach ($slabs as $slabId => $slabMeta)
foreach ($memcache->getExtendedStats('cachedump', (int) $slabId) as $entries)
if (!empty($entries))
foreach ($entries as $key => $entry)
if (strpos($key, $memcache->unique_key) === 0)
{
$value = $memcache->get($key);
$list[$key] = is_string($value) && unserialize($value) ? unserialize($value) : $value;
}
(你会注意到它没有包含在我的原始查询中,因为它没有做任何事情,但是列出了存储在memcached中的键/值)
这个功能的问题在于它显然是静默地导致memcached成为只读的.虽然更新函数的后续调用所提供的值(因为,我认为它们是从本地内存中检索的),但memcached服务中的值不是.
此行为会影响当前最新版本的memcached – 在memcache(2.2.x)中引入了中断行为
如果有人想调查这种行为,我会保持开放