Redis Hget запускает операцию WRONGTYPE для ключа, содержащего неправильное значение

Я использую nodeJs для получения значения в поле ключа Redis. Что-то вроде этого:

let result = await redisM.hget('aaa:bbb', 'profiles');

Значение, которое я ищу, является объектом, но я продолжаю получать операцию WRONGTYPE для ключа, содержащего неправильный тип исключения значения, и если я печатаю ошибку из метода hget, который я получаю:

------------------------------------
{ ReplyError: WRONGTYPE Operation against a key holding the wrong kind of value
    at parseError (/PATH123/node_modules/redis-parser/lib/parser.js:193:12)
    at parseType (/PATH123/node_modules/redis-parser/lib/parser.js:303:14)
  command: 'HGET',
  args: [ 'aaa:bbb', 'profiles' ],
  code: 'WRONGTYPE' }
------------------------------------

Если я очищаю базу данных redis, запускаю HGET aaa:bbb profiles в redis-cli, я получаю результат (nil), но это не должно вызывать эту ошибку, или это так?

Кроме того, если я установлю значение для этого ключа через redis-cli, я смогу получить его значение с помощью HGET впоследствии:

HSET sip_profiles profiles {}
(integer) 1

HGET sip_profiles profiles
"{}"

Не понимаю, почему это работает с redis-cli, но не с узлом... даже с пустым ключом...

Используемая зависимость узла: "redis": "^2.8.0"


person Eunito    schedule 20.10.2020    source источник
comment
Можете ли вы показать, как вы hset значение в своем коде?   -  person eol    schedule 20.10.2020
comment
Нет... Я получаю эту ошибку, если раньше не было выполнено hset для этого ключа/поля...   -  person Eunito    schedule 20.10.2020
comment
Не могу воспроизвести это, я всегда получаю null, если я вызываю hget с несуществующим ключом. Вы уверены, что нет входа с таким ключом?   -  person eol    schedule 20.10.2020
comment
Я также получаю ноль в клиенте, но эта ошибка в узле :(   -  person Eunito    schedule 21.10.2020
comment
Странно - попробуйте обновиться до последней версии или переключиться на ioredis   -  person eol    schedule 21.10.2020


Ответы (1)


У меня возникла та же проблема, я установил ключ String вместо ключа Hash, а затем, когда я попытался получить ключи String ключ я получил ошибку.

Решение. Убедитесь, что нужный ключ относится к типу Hash, тогда hget не выйдет из строя.

>> redis.set 1,1
=> "OK"
>> redis.hkeys 1
Operation against a key holding the wrong kind of value: Expected Hash at 1.
Redis::CommandError: WRONGTYPE Operation against a key holding the wrong kind of value
from /onelogin/src/vendor/bundle/gems/fakeredis-0.5.0/lib/redis/connection/memory.rb:991:in `data_type_check'
from /onelogin/src/vendor/bundle/gems/fakeredis-0.5.0/lib/redis/connection/memory.rb:213:in `hkeys'
from /onelogin/src/vendor/bundle/gems/fakeredis-0.5.0/lib/fakeredis/command_executor.rb:10:in `send'
from /onelogin/src/vendor/bundle/gems/fakeredis-0.5.0/lib/fakeredis/command_executor.rb:10:in `write'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:257:in `write'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:236:in `io'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:255:in `write'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:214:in `process'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:208:in `each'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:208:in `process'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:353:in `ensure_connected'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:207:in `process'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:292:in `logging'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:206:in `process'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis/client.rb:112:in `call'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis.rb:1995:in `hkeys'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis.rb:37:in `synchronize'
from /usr/local/lib/ruby/1.8/monitor.rb:242:in `mon_synchronize'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis.rb:37:in `synchronize'
from /onelogin/src/vendor/bundle/gems/redis-3.2.1/lib/redis.rb:1994:in `hkeys'
from (irb):36>> 
person G. I. Joe    schedule 07.01.2021