2013-10-10 1 views
2

Я экспериментирую с Spring Data Redis. Я написал класс Java, который позволяет мне подключаться к серверу Redis, но не сохраняет данные на сервере. Кто-нибудь подумает о том, что может быть неправильным? Ниже приведены некоторые детали-Не удалось сохранить данные с данными Spring Redis

Моя весна конфиг выглядит как-

<bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:use-pool="true" p:host-name="127.0.0.1" p:port="6379"/> 

<!-- redis template definition --> 
<bean id="redisTemplate" 
    class="org.springframework.data.redis.core.RedisTemplate" 
    p:connection-factory-ref="jedisConnFactory"/> 

Мой Java код выглядит this-

public class CacheClient { 

    @Autowired 
    private RedisTemplate<String, String> template; 
    public void setValue(String key, String value){ 
     template.boundValueOps(key).set(value); 
    } 
} 

После того, как я вызван template.setValue (ключ, значение), я делаю «get key» в redis-cli, но я не вижу значения, заданного для ключа.

Может кто-нибудь помочь в этом?

Благодаря

ответ

1

opsForValue() Попробуйте использовать

public void setValue(String key, String value){ 
     template.opsForValue().set(key, value); 
    } 
+1

Спасибо за ваш ответ Раффиан. Я понял, что с помощью boundValueOps или opsForValue я не могу получить значение из redis-cli, хотя я могу получить его через соответствующие методы get (BoundValueOperations или Operations). Я думаю, что Spring сериализует как ключ, так и значение по умолчанию, и когда мы извлекаем, нам нужно получить с помощью одного и того же сериализованного ключа (хотя я еще не проверил эту часть). – user2862924

1

@ user2862924 Вы правы в свой комментарий, он упорядочивает ключ и значение. Он использует JdkSerializationRedisSerializer(), который преобразует строку "a" в \xac\xed\x00\x05t\x00\x01a

redisTemplate.setKeySerializer(new StringRedisSerializer()); - это то, что вы хотите.

Установка этого значения из файла конфигурации более чистая.

<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/> 

    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" 
      p:hostName="127.0.0.1" p:port="6379"/> 

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" 
      p:connectionFactory-ref="jedisConnectionFactory" p:keySerializer-ref="stringRedisSerializer" p:valueSerializer-ref="stringRedisSerializer"/> 

Перед тем, как изменить метод сериализации, удалите все ранее введенные в серию значения ключа из магазина или вы получите сообщение об ошибке.

+1

Это должно быть отмечено как правильный ответ! – Sergio1978

Смежные вопросы