我将redis用作我的应用程序中的缓存存储。为此,我使用以下redis配置:
@Configuration
@EnableCaching
public class SpringRedisConfig {
@Bean
public JedisConnectionFactory connectionFactory() {
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
connectionFactory.setHostName("localhost");
connectionFactory.setPort(6379);
return connectionFactory;
}
@Bean
public RedisTemplate<String,Object> redisTemplate() {
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(Propertyaccessor.ALL,JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
//template.setConnectionFactory(factory);
redisTemplate.setKeySerializer(redisSerializer);
redisTemplate.setvalueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
}
}
在将数据存储在缓存中的服务中,我正在使用@Cacheable,如下所示:
@Cacheable(value = "institute_detail_cache",key = "'inst_'+#instituteId")
public Map<String,String> getDetailsFromCache(Long instituteId) {
log.info("not found in cache.....");
Map<String,String> map = new HashMap<>();
map.put("name","kayv");
map.put("age","20");
return map;
}
代码运行正常,并将数据作为对象存储在缓存中。这是我从redis cli获得的值:
但是我的要求是将数据(值)存储为带有键值对的json。这就是为什么我使用Jackson2JsonRedisSerializer进行值序列化的原因。
有人可以暗示我在做什么错吗?
我应该实现什么使我的类存储为json而不是本示例中使用的map?