2013-10-10 22 views
2

我正在试验Spring Data Redis。我写了一个Java类,它允许我连接到Redis服务器,但不保留服务器中的数据。有人会有一个想法,可能会出错吗?以下是一些详情 -无法使用Spring Data Redis存储数据

我的Spring配置看起来喜欢 -

<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代码看起来像这个 -

public class CacheClient { 

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

一次,我已经调用template.setValue(键,值),我在redis-cli上做了“get key”,但是我没有看到为该键设置的任何值。

有人可以帮忙吗?

感谢

回答

1

尝试使用​​

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

感谢您的回复Raffian。我发现,无论是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

相关问题