Spring boot Redis将对象设置为空json“;{};使用弹簧靴时

Spring boot Redis将对象设置为空json“;{};使用弹簧靴时,spring-boot,redis,spring-data-redis,Spring Boot,Redis,Spring Data Redis,我正试图在redis上设置一个对象。RedisTemplate配置如下所示 @Bean fun redisTemplate(): RedisTemplate<String, Any> { val redisTemplate = RedisTemplate<String, Any>() redisTemplate.connectionFactory = jedisConnectionFactory() redisTemplate.defaultSer

我正试图在redis上设置一个对象。RedisTemplate配置如下所示

@Bean
fun redisTemplate(): RedisTemplate<String, Any> {
    val redisTemplate = RedisTemplate<String, Any>()
    redisTemplate.connectionFactory = jedisConnectionFactory()
    redisTemplate.defaultSerializer = GenericJackson2JsonRedisSerializer()
    redisTemplate.keySerializer = StringRedisSerializer()
    redisTemplate.hashKeySerializer = GenericJackson2JsonRedisSerializer()
    redisTemplate.valueSerializer = GenericJackson2JsonRedisSerializer()

    redisTemplate.afterPropertiesSet()
    return redisTemplate
}

如果要存储对象,可以使用哈希

Pet宠物=新宠物();
宠物坐骨高度(10);
宠物名(“汤米”);
ObjectMapper oMapper=新的ObjectMapper();
putAll(“pet”,oMapper.convertValue(pet,Map.class));
Pet pet1=oMapper.convertValue(template.opsForHash().entries(“Pet”),Pet.class);
System.out.println(pet1.getName());
System.out.println(pet1.getHeight());
System.out.println(pet1.getWeight());
重新分配模板配置

@Bean
公共RedisTemplate RedisTemplate(){
RedisTemplate=新RedisTemplate();
setKeySerializer(新的StringRedisSerializer());
setValueSerializer(新的GenericJackson2JsonRedisSerializer());
setHashKeySerializer(新的StringRedisSerializer());
setHashValueSerializer(新的GenericJackson2JsonRedisSerializer());
setConnectionFactory(jedisConnectionFactory());
template.setEnableTransactionSupport(true);
返回模板;
}
如果要将其存储为键值对

Pet宠物=新宠物();
宠物坐骨高度(10);
宠物名(“汤米”);
template.opsForValue().set(“pettest”,pet);
Pet pet2=(Pet)template.opsForValue().get(“pettest”);
System.out.println(“boo-boo”);
System.out.println(pet2.getName());
redis中
get pettest
的结果
{“@class”:“com.cisco.rediscluster.Pet”,“name”:“tommy”,“height”:10}

如果要存储对象,可以使用散列

Pet宠物=新宠物();
宠物坐骨高度(10);
宠物名(“汤米”);
ObjectMapper oMapper=新的ObjectMapper();
putAll(“pet”,oMapper.convertValue(pet,Map.class));
Pet pet1=oMapper.convertValue(template.opsForHash().entries(“Pet”),Pet.class);
System.out.println(pet1.getName());
System.out.println(pet1.getHeight());
System.out.println(pet1.getWeight());
重新分配模板配置

@Bean
公共RedisTemplate RedisTemplate(){
RedisTemplate=新RedisTemplate();
setKeySerializer(新的StringRedisSerializer());
setValueSerializer(新的GenericJackson2JsonRedisSerializer());
setHashKeySerializer(新的StringRedisSerializer());
setHashValueSerializer(新的GenericJackson2JsonRedisSerializer());
setConnectionFactory(jedisConnectionFactory());
template.setEnableTransactionSupport(true);
返回模板;
}
如果要将其存储为键值对

Pet宠物=新宠物();
宠物坐骨高度(10);
宠物名(“汤米”);
template.opsForValue().set(“pettest”,pet);
Pet pet2=(Pet)template.opsForValue().get(“pettest”);
System.out.println(“boo-boo”);
System.out.println(pet2.getName());
redis中
get pettest
的结果
{@class:“com.cisco.rediscluster.Pet”,“name:“tommy”,“height:”10}

我可以,但我应该吗?我的意思是,难道没有一种方法可以将一个对象作为一个整体而不是地图的一部分来存储吗?如果没有,为什么?我回答的第二部分是存储整个对象,在读取数据时,您只需键入并将其转换为正确的类,在您的情况下,TreeI可以,但我应该吗?我的意思是,难道没有一种方法可以将对象存储为整体而不是地图的一部分吗?如果没有,为什么?我回答的第二部分是存储整个对象,在您的案例树中读取数据时,您只需将其类型转换为正确的类
127.0.0.1:6379> keys *
1) "CATEGORIES"
127.0.0.1:6379> GET CATEGORIES
"{}"
127.0.0.1:6379>