4

我正在尝试使用 Spring Data Redis。我编写了一个 Java 类,它允许我连接到 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 代码如下所示-

public class CacheClient {

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

调用 template.setValue(key,value) 后,我在 redis-cli 上执行“获取密钥”,但我没有看到为密钥设置的任何值。

有人可以帮忙吗?

谢谢

4

2 回答 2

5

@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"/>

在更改序列化方法之前,请从存储中删除所有先前序列化的键值,否则会出错。

于 2014-08-27T13:31:00.470 回答
1

尝试使用opsForValue()

public void setValue(String key, String value){
      template.opsForValue().set(key, value);
    }
于 2013-10-10T14:54:56.100 回答