Как вывести список данных с помощью консоли redis-cli?

#java #spring-boot #redis #jedis

#java #весенняя загрузка #redis #jedis

Вопрос:

Я могу добавлять и просматривать пары ключ-значение с помощью моих вызовов метода restful API. ответ метода restful api

Но после добавления пар ключ-значение, когда я пытаюсь перечислить / просмотреть их с помощью консоли redis-cli, в ней не выводится никаких значений. результаты redis-cli

Как вы можете заметить, в консоли отображаются некоторые ненужные значения для команды **keys *** (после добавления нового ключа / значения через браузер), но когда я пытаюсь извлечь ключ, он отображается как пустой.

В чем может быть причина этого? Как правильно вывести список значений в консоли?

также прилагаю определения методов restful api: методы restful api

Ответ №1:

Значение, которое вы видите в выходных данных KEYS * , является java-сериализованной строкой user .

Первые два байта xacxed (шестнадцатеричный: 0xACED) являются STREAM_MAGIC константой.

Следующие два байта x00x05 (hex: 0x0005) — это STREAM_VERSION , версия протокола сериализации.

Следующий байт t равен 0x74 = TC_STRING , что означает, что это строковый объект.

Наконец, x00x04 указана длина строки.

Этот протокол описан в протоколе потока сериализации объектов, в 6.4.2 Терминальные символы и константы

Вероятно, вы захотите просмотреть свой код на предмет того, почему строки сериализуются на java перед попаданием в Redis. Вероятно, это из-за h: того, что показано на скриншоте.

Тем временем вы можете сделать GET "xacxedx00x05tx00x04user" проверку значения вашего user ключа.

Поведение IDE

Комментарии:

1. Большое вам спасибо за ответ, я обязательно вернусь к этому обсуждению после просмотра вашего ответа. что касается буквы h на скриншоте, пожалуйста, обратите внимание, что это особенность intellij IDE, в которой IDE автоматически пытается визуально представить ожидаемые параметры таким образом в сравнении с фактическими. Это никак не повлияет на код. (Я добавил скриншот определения / подписи метода в текст выше)

2. Если вы используете Springboot с Redis. Вы должны настроить сериализацию redis так, чтобы использовать Jackson для сериализации вашего ключа / значения. Другой быстрый способ — просто StringRedisTemplate вместо RedisTemplate