Memcached: pode conectar, mas é impossível definir o valor

1

Eu instalei memcached no Debian squeeze usando o pacote memcached. A instância do memcached começa com 384 MB. Então tento me conectar:

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

O que isso significa? Normalmente, get mykey deve retornar 5.

O comando stats fornece

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

Log do servidor com -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.
    
por jcisio 10.01.2012 / 08:34

2 respostas

5

Dados os exemplos em outro site , aposto que você não fez set o mykey para o valor que você esperava. E assim seu getkey também está falhando. Tente uma tecla get primeiro ou tente excluir o mykey e use os exemplos fornecidos.

    
por 10.01.2012 / 20:59
3

Acabamos de encontrar esse erro e, infelizmente, as respostas aqui não foram suficientes para entender e resolver o problema.

Deste artigo (desloque-se para "testar o daemon memcached com o telnet" :

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

O sinalizador é um número arbitrário que você pode usar em sua lógica de cliente. Destina-se a ser metadados que você pode atribuir a cada objeto em cache. Nos exemplos, isso é mostrado como 1, mas aqui não tem significado. Eu defino o tempo de extenso para zero (nunca expira) e os bytes para o número de caracteres que eu quero armazenar. Observe no último exemplo que, se os bytes e o número de caracteres não corresponderem, ocorrerá um erro.

Portanto, o problema raiz aqui quando você vê esse erro é que você está configurando o valor para algo maior que o número de bytes que você está alocando no comando set.

No caso do OP, 5 bytes estão sendo alocados, mas o valor que está tentando ser configurado é "get mykey", que é mais de 5 bytes (e também um erro de sintaxe, como o OP declarou).

Espero que isso torne mais claro para outros newbs memcached como eu quando eles encontrarem este erro e não tiverem idéia do que isso significa.

    
por 03.08.2012 / 00:00