Tôi đã giải quyết được vấn đề của mình. Tôi đang tìm kiếm và tìm thấy bài đăng này.
Tôi đã thay đổi mã của mình để sử dụng một số thuộc tính của RedisTemplate:
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(cf);
configureSerializers(redisTemplate);
JedisConnectionFactory jedisConnectionFactory = (JedisConnectionFactory) cf;
JedisPoolConfig actualPoolConfig = jedisConnectionFactory.getPoolConfig();
jedisConnectionFactory.setPoolConfig(createJedisPoolConfig(actualPoolConfig));
return redisTemplate;
}
private void configureSerializers(RedisTemplate<String, String> redisTemplate) {
RedisSerializer<String> serializerKey = new StringRedisSerializer();
redisTemplate.setKeySerializer(serializerKey);
redisTemplate.setHashKeySerializer(serializerKey);
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
om.configure(
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
jackson2JsonRedisSerializer.setObjectMapper(om);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
}
Sự cố là do Serializer mặc định là "JdkSerializationRedisSerializer", hiện tôi đang sử dụng "StringRedisSerializer" để tạo khóa. Để tạo giá trị, tôi đang sử dụng "Jackson2JsonRedisSerializer" để chuyển đổi dữ liệu của mình trong JsonValue.
Bây giờ, các khóa của tôi không có ký tự "lạ".