gpt4 book ai didi

java - Spring Boot Redis 将 POJO 列表存储为值

转载 作者:行者123 更新时间:2023-12-01 14:27:15 25 4
gpt4 key购买 nike

我在 Spring Boot 中使用 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());
}
}

缓存工作正常,通过我的应用程序进行序列化/反序列化似乎也有效。但是当我使用 redis-cli 时,我在使用命令时看到以下内容
key *
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\x01w0\x00\x01w\x00\x00\x01sr\x00(com.example.等等....

为什么会这样?

此外,我尝试将 valueSerializer 的配置中的 GenericJackson2JsonRedisSerializer 更新为 Jackson2JsonRedisSerializer。结果并没有什么不同。

此外,我尝试获取 key 的类型,结果为“字符串”,因此列表将存储为字符串。

最佳答案

你看到这些奇怪字符的原因是因为它是二进制数据。

您将 GenericJackson2JsonRedisSerializer 配置为值的序列化程序。此类在内部调用 ObjectMapper#writeValueAsBytes(...),顾名思义,它会将您放入的值转换为字节。

这是可以预料的。 Redis 不直接支持存储 Java 对象。然而,它确实支持存储二进制数据。通过使用 Jackson,我们可以将 Java 对象转换为字节并将其存储在 Redis 中。当然反过来也行。

关于java - Spring Boot Redis 将 POJO 列表存储为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61943188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com