У меня проблемы с memcache на моем php-сайте. Иногда я получаю сообщение о том, что сайт работает неправильно, и когда я смотрю на memcache, я обнаруживаю, что на обоих серверах кластера существует несколько ключей. Данные не совпадают между двумя записями (одна старше).
В моем понимании memcached было то, что этого не должно происходить ... клиент должен хешировать ключ, а затем всегда выбирать один и тот же сервер. Так что либо мое понимание неверно, либо мой код. Кто-нибудь может объяснить, почему это может происходить?
FWIW серверы размещены на Amazon EC2.
Все мои подключения к memcache открываются с помощью этой функции:
$mem_servers = array(
array('ec2-000-000-000-20.compute-1.amazonaws.com', 11211, 50),
array('ec2-000-000-000-21.compute-1.amazonaws.com', 11211, 50)
);
function ConnectMemcache()
{
global $mem_servers;
if ($memcon == 0) {
$memcon = new Memcache();
foreach($mem_servers as $server) $memcon->addServer($server[0], $server[1], true);
}
return($memcon);
}
и значения сохраняются через это:
function SetData($key,$data)
{
global $mem_global_key;
if(MEMCACHE_ON_OFF)
{
$key = $mem_global_key.$key;
$memcache = ConnectMemcache();
$memcache->set($key, $data);
return true;
}
else
{
return false;
}
}