Дубликаты ключей в memcached - PullRequest
4 голосов
/ 02 февраля 2012

У меня проблемы с 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;
    }
}

1 Ответ

1 голос
/ 03 февраля 2012

Я думаю, что это сообщение в блоге касается проблем, с которыми вы столкнулись.

http://www.caiapps.com/duplicate-key-problem-in-memcache-php/

Из статьи звучит так:
- сервер memcache, у которого изначально есть ключ, выпадает
- ключ воссоздан на 2-м сервере с обновленными данными
- 1-й сервер возвращается онлайн и в кластер со старыми данными.
- Теперь у вас есть ключи сохранения на 2 серверах с разными данными

Похоже, вам может понадобиться использовать Memcache :: flush, чтобы очистить кластер memcache перед вашей записью, чтобы минимизировать продолжительность дубликатов в вашем кластере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...