使用RedisTemplate设置一个值,但从终端Redis-CLI得到零

bxjv4tth  于 2022-12-11  发布在  Redis
关注(0)|答案(3)|浏览(154)

1.使用Spring data redis库将密钥name设置为alex

@Test
public void testOne() throws Exception {
    redisTemplate.opsForValue().set("name","alex");
}

2.尝试使用redis-cli从终端获取名称,但没有

127.0.0.1:6379> get name
(nil)

3.但是alex可以这样检索

Object hello = redisTemplate.opsForValue().get("name");
System.out.println(hello);
-----
alex

有谁能解释一下吗,谢谢!

kmb7vmvb

kmb7vmvb1#

RedisTemplate根据配置的RedisSerializer转换键和值(参见6.7串行器)。默认值为JdkSerializationRedisSerializer
给定字符串name,redis中的实际键如下所示:

GenericJackson2JsonRedisSerializer  : "name"
JacksonJsonRedisSerializer:         : "name"
Jackson2JsonRedisSerializer:        : "name"
JdkSerializationRedisSerializer     : \xac\xed\x00\x05t\x00\x04name
OxmSerializer with XStreamMarshaller: <string>name</string>
StringRedisSerializer               : name

因此,如果您只打算使用字符串,那么像StringRedisTemplate这样的方便类可能是一个不错的选择。

polkgigr

polkgigr2#

尝试用"环绕该键:

127.0.0.1:6379> get "name"
fnvucqvd

fnvucqvd3#

RedisTemplate上设置一些serializer选项,如下所示👇

private RedisTemplate<String, ?> createRedisTemplateForEntity() {

    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
    redisTemplate.setConnectionFactory(getRedisConnectionFactory());

    redisTemplate.setHashValueSerializer(new StringRedisSerializer());
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setValueSerializer(new StringRedisSerializer());
    redisTemplate.setHashKeySerializer(new StringRedisSerializer());

    redisTemplate.afterPropertiesSet();
    return redisTemplate;
}

其中getRedisConnectionFactory()返回您的Redis连接(即:JedisConnectionFactory)的数据。
😄

相关问题