Что вызывает memcached ошибку 10 ("ошибка сервера")?
Используя PHP, я сохраняю массив в memcached как часть следующего процесса:
- Получить массив из memcached
- Выполнять операции над первым элементом в массиве
- Обновление массива на основе результата операций
- Установить массив в memcached
Массив содержит URL-адреса в виде строк.
Операция установки memcached не выполняется для больших размеров массива. Совсем недавно это не удалось для массива, содержащего 78175 URL.
Ошибка, которую я получаю из memcached, является несколько общей:
Result code: 10
Result message: SERVER ERROR
Документация libmemcached мало полезна для этой конкретной ошибки.
Код, который я использую, довольно прост:
public function save() {
$this->memcached->set($this->key, $this->items);
}
protected function load() {
$this->items = $this->memcached->get($this->key);
if (!$this->items) {
$this->items = array();
}
}
Документация libmemcached не очень помогает при этой ошибке, а сама ошибка понятна нечетко.
Что может быть причиной для memcached ошибки 10?
2 ответа
Решение
Error is Memcached::OPT_BUFFER_WRITES - 10
$this->_Memcache =& new Memcached();
$this->_Memcache->setOption(Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_PHP);
$this->_Memcache->setOption(Memcached::OPT_NO_BLOCK, true);
$this->_Memcache->setOption(Memcached::OPT_TCP_NODELAY, true);
$this->_Memcache->setOption(Memcached::OPT_BUFFER_WRITES, true);
$this->_Memcache->setOption(Memcached::OPT_SERVER_FAILURE_LIMIT,3);
$this->_Memcache->setOption(Memcached::OPT_HASH,Memcached::HASH_CRC);
В моем случае, я полагаю, это произошло потому, что данные превысили глобальный максимум для объекта memcache (1 МБ).