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.
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:
Luego, puede usar el método
getMapCache
de Redisson para recuperar el mapa:Esto debería funcionar sin problemas, y debería poder recuperar los datos como un conjunto de pares clave-valor.