java - 使用 spring-data-redis 在 redis 中存储原始 json

标签 java json spring serialization spring-data

我正在使用 RedisCacheManager 将我的缓存数据存储在我的 spring-boot 应用程序中。默认序列化程序似乎将所有内容序列化为字节,并将字节反序列化为适当的 java 类型。

但是,我想将缓存数据存储为 json,以便我可以从非 java 客户端读取它。

我发现从默认序列化器切换到其他序列化器(例如 Jackson2JsonRedisSerializer)应该可以工作。这样做之后,反序列化阶段失败。

pom.xml

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
    </dependency>

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
    </dependency>

缓存配置文件

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public RedisConnectionFactory createRedisConnectionFactory() {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setHostName("localhost");
        return factory;
    }

//    SPRING-DATA-REDIS ALREADY PROVIDES A STRING REDIS TEMPLATE, SO THE FOLLOWING IS NOT NECESSARY
//    @Bean
//    public RedisTemplate<String, String> createRedisTemplate(RedisConnectionFactory factory) {
//        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
//        redisTemplate.setConnectionFactory(factory);
//        return redisTemplate;
//    }

    @Bean
    public CacheManager redisCacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        return cacheManager;
    }
}

有没有办法以纯 JSON 格式存储它们并成功反序列化?

最佳答案

将此添加到您的配置中以在 redis 模板中显式设置 jackson 序列化程序。

public @Bean RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

    RedisTemplate<Object, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(connectionFactory);
    template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
    template.setKeySerializer(new StringRedisSerializer());
    template.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());
    template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    return template;
}

关于java - 使用 spring-data-redis 在 redis 中存储原始 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875635/

相关文章:

java - 如何在 IntelliJ 上调试 Drools 规则?

java - 我的错误是什么? java Greeter类文件和驱动程序文件。声明greeter类并在驱动程序文件中实现

java - optstring 未转换为字符串 [aws json 对象]

json - 无法识别的内容类型参数 : format when serving model on databricks experiement

json - 使用jq使用可变键构造JSON

sql - Postgres : How to combine "NOT IN" and JSON "->>"?

java - Spring Data Rest + Spring Security 没有 Spring boot 可以工作吗?

java - Spring Boot Bean 验证@NotEmpy 不起作用

java - hdfs纯文本写入hbase,未设置输出目录

java - Spring AOP 无法双重绑定(bind)注解