Назад | Перейти на главную страницу

Memcached: можно подключиться, но установить значение невозможно

Я установил memcached в Debian squeeze, используя пакет memcached. Экземпляр memcached начинается с 384 МБ. Потом пытаюсь подключить:

jcisio@cecile:~$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set mykey 0 60 5
get mykey
CLIENT_ERROR bad data chunk
ERROR
stats items
END

Что это значит? Как обычно get mykey должен вернуть 5.

Команда stats дает

STAT pid 5456
STAT uptime 21334
STAT time 1326180707
STAT version 1.4.5
STAT pointer_size 64
STAT rusage_user 0.168010
STAT rusage_system 0.204012
STAT curr_connections 5
STAT total_connections 9
STAT connection_structures 6
STAT cmd_get 0
STAT cmd_set 1
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 184
STAT bytes_written 2463
STAT limit_maxbytes 402653184
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
STAT reclaimed 0
END

Журнал сервера с -vv:

<27 server listening (udp)
<28 new auto-negotiating client connection
28: Client using the ascii protocol
<28 set mykey 0 60 5
>28 CLIENT_ERROR bad data chunk
<28 ey
>28 ERROR
<28 stats items
<28 quit
<28 connection closed.

Учитывая примеры на другой сайт, Держу пари, что вы не установили mykey на ожидаемое значение. И поэтому ваш ключ тоже не работает. Сначала попробуйте получить ключ или попробуйте удалить mykey, а затем используйте предоставленные примеры.

Только что столкнулся с этой ошибкой, и, к сожалению, ответов здесь было недостаточно для понимания и решения проблемы.

Из этого статья (прокрутите вниз до «тестирования демона memcached с помощью telnet»:

set <key> <flag> <exptime> <bytes>\r\n

Флаг - это произвольное число, которое вы можете использовать в своей клиентской логике. Это метаданные, которые вы можете назначить каждому кэшированному объекту. В примерах это показано как 1, но здесь это не имеет значения. Я установил время истечения на ноль (никогда не истекает), и байтов к количеству символов, которые я хочу сохранить. Обратите внимание, что в последнем примере, если байты и количество символов не совпадают, возникает ошибка.

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

В случае OP выделяется 5 байтов, но значение, которое пытается установить, - это «get mykey», которое превышает 5 байтов (а также синтаксическая ошибка, как заявил OP).

Надеюсь, это проясняет ситуацию для других новичков в memcached, таких как я, когда они сталкиваются с этой ошибкой и не понимают, что это означает.