#java #spring-boot #redis #jedis
#java #весенняя загрузка #redis #jedis
Вопрос:
Я могу добавлять и просматривать пары ключ-значение с помощью моих вызовов метода restful API.
Но после добавления пар ключ-значение, когда я пытаюсь перечислить / просмотреть их с помощью консоли redis-cli, в ней не выводится никаких значений.
Как вы можете заметить, в консоли отображаются некоторые ненужные значения для команды **keys *** (после добавления нового ключа / значения через браузер), но когда я пытаюсь извлечь ключ, он отображается как пустой.
В чем может быть причина этого? Как правильно вывести список значений в консоли?
Ответ №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
ключа.
Комментарии:
1. Большое вам спасибо за ответ, я обязательно вернусь к этому обсуждению после просмотра вашего ответа. что касается буквы h на скриншоте, пожалуйста, обратите внимание, что это особенность intellij IDE, в которой IDE автоматически пытается визуально представить ожидаемые параметры таким образом в сравнении с фактическими. Это никак не повлияет на код. (Я добавил скриншот определения / подписи метода в текст выше)
2. Если вы используете Springboot с Redis. Вы должны настроить сериализацию redis так, чтобы использовать Jackson для сериализации вашего ключа / значения. Другой быстрый способ — просто StringRedisTemplate вместо RedisTemplate