Проблема при работе с расширением memcached в php
Работал раньше сайт с memcache.
Решили перейти на memcached.
И повалились ошибки SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY, причём сначала одна CLIENT ERROR, а уже потом куча SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY.
Гугление ничего не дало, а проблема оказалась в следующем: первая ошибка возникала из-за некорректного ключа (пробел в названии ключа), после чего сервер расстраивался, и больше ничего делать не давал.
Ключ был следующий: info__rating DESC__1, генерился автоматически и никаких проблем при использовании его в memcache не вызывал. Понятное дело, что ключ плохой, но это не мешало другому расширению успешно работать.
А решение применили банальное: $Key = str_replace( ‘ ‘, ‘_’, $Key );, теперь вроде работает).
Окончательно все проблемы решила опция
1 |
$this->setOption( Memcached::OPT_BINARY_PROTOCOL, true ); |
После этого лог ошибок стал пустым.
Коллега, который этим вопросом плотно занимается, считает, что это оттого, что по умолчанию протокол используется plain text (а именно, ascii), и UTF-символы интерпретируются неправильно (у нас ферма из нескольких машин, и на каждой окружение несколько отличается, к сожалению). И как только включили бинарный протокол, разногласия исчезли.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function __construct() { parent::__construct(); $this->setOption( Memcached::OPT_BINARY_PROTOCOL, true ); $this->setOption( Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT ); $this->setOption( Memcached::OPT_HASH, Memcached::HASH_CRC ); $this->setOption( Memcached::OPT_SERVER_FAILURE_LIMIT, 3 ); $this->setOption( Memcached::OPT_NO_BLOCK, true ); // асинхронный ввод-вывод $this->setOption( Memcached::OPT_TCP_NODELAY, true ); // при работе с сокетами надо потестить - может ускорить работу $this->connection = $this->addServers( array( array( <хост>, <порт> ) ) ); ... } |
При использовании ключа:
1 2 3 4 5 6 7 |
... $key = str_replace( array( ' ', ',', ':' ), '_', $key ); if ( strlen($key) > 220 ) { $key = md5( $key ); } ... |
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.