【发布时间】:2020-09-08 14:17:47
【问题描述】:
我正在使用带有 Spring 引导的 Redis。我将字符串用作键,并将其值用作复杂 POJO 的列表。以下是我的配置:
@Configuration
@EnableCaching
@Slf4j
public class RedisCacheConfig extends CachingConfigurerSupport {
private static final long DEFAULT_CACHE_EXPIRES = 60;
@Bean
public RedisTemplate<String, Object> redisTemplate(final RedisConnectionFactory redisConnectionFactory) {
final RedisTemplate<String, Object> template = new RedisTemplate<>();
setRedisTemplateConfigValues(redisConnectionFactory, template);
return template;
}
@Bean
public CacheManager cacheManager(final RedisConnectionFactory redisConnectionFactory) {
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
return RedisCacheManager
.builder(redisConnectionFactory)
.cacheDefaults(createCacheConfiguration())
.withInitialCacheConfigurations(cacheConfigurations).build();
}
private static RedisCacheConfiguration createCacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(DEFAULT_CACHE_EXPIRES));
}
private <T> void setRedisTemplateConfigValues(final RedisConnectionFactory redisConnectionFactory,
final RedisTemplate<String, T> template) {
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
}
}
cahcing 工作正常,通过我的应用程序进行序列化/反序列化似乎也可以工作。但是当我使用redis-cli时,当我使用命令时我会看到以下内容 按键 *
1) "schools::ABC"
现在 ABC 键的值应该是复杂对象的列表。但是当我这样做时 获取“学校::ABC”
我得到如下奇怪字符的值:
\xac\xed\x00\x05sr\x00\x13java.util.ArrayListx\x81\xd2\x1d\x99\xc7a\x9d\x03\x00\x01I\x00\x04sizexp\x00\x00\x00\x01w\ x04\x00\x00\x00\x01sr\x00(com.example.等等....
为什么会这样?
另外,我尝试将 valueSerializer 配置中的 GenericJackson2JsonRedisSerializer 更新为 Jackson2JsonRedisSerializer。结果也不例外。
另外,我尝试获取键的类型,我得到的结果是“字符串”,所以列表被存储为字符串。
【问题讨论】:
-
能否指定 Spring Boot 和 Redis 版本?
-
@RobertoManfreda Spring boot 2.1.4.RELEASE 和 Redis 来自 spring-boot-starter-data-redis
-
您能否发布一个复杂对象的示例,或从应用程序代码推送的任何键值对。
-
您可以在向缓存中添加项目的位置添加代码吗?
标签: java json spring-boot arraylist redis