Spring Data для Redis: при работе со значениями работает ли он только с StringRedisTemplate?

При работе со строками с помощью Spring Data для Redis я заметил следующее поведение:

Учитывая приведенный ниже код:

template.opsForValue().set("person", "value");

это работает только тогда, когда я использую экземпляр StringRedisTemplate, а не когда я использую экземпляр RedisTemplate. Разве он не должен работать с RedisTemplate, поскольку он объединяет все операции для всех типов данных Redis?


person Kico Lobo    schedule 10.03.2013    source источник


Ответы (1)


StringRedisTemplate — это просто специализация RedisTemplate, поэтому вы должны иметь возможность использовать RedisTemplate напрямую, если хотите, при условии, что вы установили все сериализаторы ключ/значение, как это делается в конструкторе StringRedisTemplate.

Возможно, вы могли бы предоставить больше информации о вашей конфигурации и о том, какую ошибку вы получаете? Кроме того, почему StringRedisTemplate не является желательным вариантом для вашего варианта использования?

person Jennifer Hickey    schedule 11.03.2013
comment
Единственная конфигурация, которую я изменил в экземпляре RedisTemplate, — это внедрение ConnectionFactory, как в документации, и оно просто не работает. Нужно ли мне добавлять какие-либо дополнительные зависимости к этому классу? - person Kico Lobo; 12.03.2013
comment
Возможно, вам потребуется установить сериализаторы ключ/значение и хэш-ключ/значение хэша на экземпляр StringRedisSerializer, хотя сериализатор по умолчанию, похоже, работает для простых строк. Какую ошибку вы получаете? И какой ConnectionFactory вы используете? - person Jennifer Hickey; 12.03.2013
comment
Я не получаю ошибки. Он просто не сохраняет данные на сервере Redis. - person Kico Lobo; 12.03.2013
comment
Попробуйте установить сериализаторы на экземпляр StringRedisSerializer, как я упоминал выше. По умолчанию RedisTemplate использует сериализацию Java для ключей, поэтому они не попадают в Redis в виде простых строк (хотя, если вы выполните template.opsForValue().get(person), вы должны получить результат, поскольку происходит та же самая сериализация к ключу при получении). Например, если я делаю ключи * через redis-cli после выполнения вашего кода, ключ человека фактически указан как \xac\xed\x00\x05t\x00\x06person. - person Jennifer Hickey; 13.03.2013