es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error del cliente Java Redisson: argumento incorrecto #2 para ‘unpack’ (cadena de datos demasiado corta)

No puedo leer redis utilizando redisson. Me sigue dando este error,

Excepción de ejecución[[RedisException: ERR Error running script (call to f<em>7b48e722af8a55315c5dd6c1028bf4652ad35c66):
 @user</em>script:1: user<em>script:1: bad argument #2 to 'unpack' (data string too short). channel: [id: 0xdf273186, L:/127.0.0.1:62712 - R:/127.0.0.1:6379] 
command:(EVAL),params:[local s = redis.call('hgetall', KEYS[1]); local result = {}; local maxSize = tonumber(redis.call('hg...,5,ALLUS</em>XXX,redisson<strong>timeout</strong>set:{ALLUS<em>XXX},redisson<strong>idle</strong>set:{ALLUS</em>XXX},redisson<strong>map<em>cache</em></strong>lastaccess<em>_set:{ALLUS</em>XXX},{ALLUS<em>XXX}:redisson</em>options,1637953536277]]]

Puedo establecer y obtener valores utilizando el marco de trabajo redisson. Pero cuando configuro usando la CLI como

HMSET ALLUS_XXX 1 "{'ev':'Q','sym':'XXX','bx':'1','ax':'20','bp':157.2,'ap':157.21,'bs':5,'as':1,'t':'1637949207844','q':'60303179','z':3}"

y ahora intento recuperar usando código,
getMapCache("ALLUS_XXX").readAllEntrySet()
Arroja el error anterior.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el error es causado por un argumento incorrecto para la función ‘unpack’ en el script Redis que Redisson está intentando ejecutar. Esto suele suceder cuando la cadena proporcionada como argumento no es lo suficientemente larga como para dividirse en el número esperado de elementos.

    Dado que pudo establecer y recuperar valores usando Redisson, es probable que el problema esté relacionado con la forma en que se está estableciendo la información en Redis usando el CLI.

    El comando HMSET que publicó parece estar estableciendo un único valor para el campo hash “ALLUS_XXX”, y el valor es una cadena que representa un objeto JSON. Sin embargo, al usar Redisson para recuperar el valor, está llamando al método “readAllEntrySet()” de una caché de mapa, que espera que el valor sea un mapa o un conjunto de pares clave-valor.

    Para solucionar el problema, debe almacenar el objeto JSON como un mapa en Redis, en lugar de una cadena. Puede hacer esto usando el comando HSET y proporcionando los pares clave-valor como argumentos separados:

    HSET ALLUS_XXX ev Q sym XXX bx 1 ax 20 bp 157.2 ap 157.21 bs 5 as 1 t 1637949207844 q 60303179 z 3
    

    Luego, puede usar el método getMapCache de Redisson para recuperar el mapa:

    getMapCache("ALLUS_XXX").readAllEntrySet()
    

    Esto debería funcionar sin problemas, y debería poder recuperar los datos como un conjunto de pares clave-valor.

Comments are closed.