#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.defaultSerializer = GenericJackson2JsonRedisSerializer()
redisTemplate.keySerializer = StringRedisSerializer()
redisTemplate.hashKeySerializer = GenericJackson2JsonRedisSerializer()
redisTemplate.valueSerializer = GenericJackson2JsonRedisSerializer()
redisTemplate.afterPropertiesSet()
return redisTemplate
}
вот моя строка настройки
redisUtil.redisTemplate().opsForValue().set("CATEGORIES", tree)
и в результате получается
127.0.0.1:6379> keys *
1) "CATEGORIES"
127.0.0.1:6379> GET CATEGORIES
"{}"
127.0.0.1:6379>
Ответ №1:
Если вы хотите сохранить объект, вы можете использовать хэш
Pet pet = new Pet();
pet.setHeight(10);
pet.setName("tommy");
ObjectMapper oMapper = new ObjectMapper();
template.opsForHash().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());
Конфигурация RedisTemplate
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(jedisConnectionFactory());
template.setEnableTransactionSupport(true);
return template;
}
Если вы хотите сохранить его как пару ключ-значение
Pet pet = new Pet();
pet.setHeight(10);
pet.setName("tommy");
template.opsForValue().set("pettest", pet);
Pet pet2 = (Pet) template.opsForValue().get("pettest");
System.out.println("boo boo");
System.out.println(pet2.getName());
результат get pettest
в redis
{"@class":"com.cisco.rediscluster.Pet","name":"tommy","height":10}
Комментарии:
1. Я могу, но должен ли я?, Я имею в виду, нет ли способа сохранить объект целиком, а не часть карты? Если нет, то почему?
2. вторая часть моего ответа заключается в сохранении всего объекта, вам просто нужно ввести приведение его к правильному классу при чтении данных, в вашем случае дерева