Memcached set() не работает: WRITE FAILURE

Итак, Memcached не может записать определенные ключи, getResultMessage() говорит WRITE FAILURE
Я использую это в настройке:

$this->mmcache = new Memcached();
$this->mmcache->addServer('localhost',11211, 100);
$this->mmcache->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$this->mmcache->setOption(Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_IGBINARY);
$this->mmcache->setOption(Memcached::OPT_COMPRESSION, false);

Какие-то ключи работают каждый раз, какие-то каждый раз не работают. Я даже пытался кодировать ключи в base64, но они все равно терпят неудачу, даже простая функция, такая как

for($i=1;$i<100;$i++) {
  $this->mmcache->set('testkey'.$i,$i*100,600);
}

возвращает WRITE FAILURE каждый раз.

Отключение бинарного протокола просто меняет ошибку на HOSTNAME LOOKUP FAILURE, но примерно 50% ключей все еще работают, и я просто не могу понять, какие будут работать, а какие нет.

Извините, я задал неправильный вопрос раньше.


исходный вопрос: Memcache в v1.4.4 возвращает NULL
Я сохраняю и читаю большие объемы данных в memcache из php. Я использую обычное подключение к серверу memcache, который работает на локальном хосте. Я использую Memcache 1.4.4

Но из 50-60 ключей, которые я читаю из memcache за один запуск скрипта, более 50% возвращаются как null. Согласно php.net, Memcache::get() должно возвращать false, если ключ не существует или срок его действия истек. Так почему же он возвращает «null»?

Это происходит даже для ключей, которые я только что записал в memcache. Я кэширую что-то в течение 24 часов, а через минуту вместо этого получаю «ноль». Memcache не заполнен даже на 50%, поэтому нет причин для очистки ключей, и даже если бы они были, они должны вернуться как ложные, а не нулевые.

Кто-нибудь еще сталкивался с этой проблемой?


person jab11    schedule 17.02.2010    source источник
comment
Просто на всякий случай: вы дважды/тройно проверили, что данные, которые вы добавляете(), не являются просто нулевыми?   -  person VolkerK    schedule 17.02.2010
comment
да, абсолютно, отлаживая все детали на каждом шаге, некоторые ключи возвращают значения, некоторые нули.   -  person jab11    schedule 17.02.2010
comment
Разве в memcache нет журнала ошибок? Он должен содержать более подробную информацию о том, что пошло не так.   -  person Pekka    schedule 17.02.2010
comment
Привет! Вы поняли, почему это произошло?   -  person Industrial    schedule 01.06.2010
comment
Этот звук похож на stackoverflow.com/questions/9920132/   -  person Sean Ouimet    schedule 24.08.2013


Ответы (2)


Сегодня у меня была такая же проблема.

Получается нужно использовать 127.0.0.1 вместо localhost.

Действительно раздражает.

person Franz    schedule 15.02.2012
comment
Это сработало для меня. Мой класс php Memcached работал с локальным хостом. Был ли регресс в новой версии? - person David Xia; 24.02.2015

Звучит так, как будто вы достигли предела памяти в Memcached. Какие вещи вы пишете? Насколько они большие?

Если ваш сервер Memcached заполнен или почти заполнен, я даже могу ожидать, что это произойдет.

С другой стороны, дважды проверьте, не установлен ли у вас брандмауэр, ограничивающий скорость. Возможно, он видит, как вы стучите по своему ящику Memcached, и сходит с ума.

Наконец, убедитесь, что вы закрываете соединение с Memcached, когда закончите с ним. Если вы оставите слишком много открытых, все станет некрасиво.

person mattbasta    schedule 17.02.2010