Java Spring RedisTemplate:将多个模型类序列化为JSON。需要使用多个RedisTemplate吗?

Java Spring RedisTemplate:将多个模型类序列化为JSON。需要使用多个RedisTemplate吗?,java,json,spring,serialization,redis,Java,Json,Spring,Serialization,Redis,我正在使用SpringRedis支持在Redis中保存我的对象 我有几个DAO处理不同的模型类: 例如,ShopperHistoryDao保存/检索ShopperHistoryModel的对象,ShopperItemHistoryDao保存/检索ItemHistoryModel的对象 我想使用jacksonjson重新序列化器将我的对象序列化到json或从json反序列化 但是在JacksonJsonRedisSerializer的构造函数中,它采用一个特定的模型类 JacksonJsonRed

我正在使用SpringRedis支持在Redis中保存我的对象

我有几个DAO处理不同的模型类:

例如,
ShopperHistoryDao
保存/检索
ShopperHistoryModel
的对象,
ShopperItemHistoryDao
保存/检索
ItemHistoryModel
的对象

我想使用jacksonjson重新序列化器将我的对象序列化到json或从json反序列化

但是在JacksonJsonRedisSerializer的构造函数中,它采用一个特定的模型类

JacksonJsonRedisSerializer(Class<T> type)
是的,似乎设计为具有值序列化程序的单个实例

我打算建议一种可能的解决方法,即使用一个包含内部序列化程序映射的
重新序列化程序
,这样您就可以将一个
重新序列化模板
与一个可以处理多种类型的序列化程序一起使用,但是因为
重新序列化程序
不提供类似
布尔canDeserialize(…)
(就像SpringMVC中的HTTP消息转换器一样)这似乎不可能


因此,您似乎一直在使用多个
RedisTemplate
实例。

有点旧,但您可以这样做:

<bean id="RedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <property name="connectionFactory" ref="jedisConnectionFactory" />
    <property name="valueSerializer">
        <bean id="jackson2JsonRedisSerializer" 
                        class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer">
            <constructor-arg type="java.lang.Class" value="Object.class" />
        </bean>   
    </property>
</bean>
我应该做这项工作

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());                                           
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return redisTemplate;
    }
在服务中,您可以使用缓存模型

    @Cacheable(value = "whitePaper", key = "#title")
    public WhitePaper findWhitePaperByTitle(String title) 
    {
        WhitePaper whitePaper = repository.findByTitle(title);
        return whitePaper;
    }

检查这篇文章:

old,但也许可以扩展
redisJson序列化程序
,并使用
fasterxml.jackson
,使其更通用。也就是说,不强制将其绑定到单个类定义?公共列表FindHitePaperByTitle(字符串标题)如何?您可以共享源代码吗?我收到以下错误“无法处理托管/反向引用'defaultReference':反向引用类型(java.util.List)与托管类型不兼容”这是一本获取为字符串的手册,然后使用ObjectMapper将其转换。您可以像上面的答案一样受益于Redis序列化程序
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());                                           
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return redisTemplate;
    }
"{\"@class\":\"com.prnv.model.WhitePaper\",\"title\":\"Hey\",\"author\":{\"@class\":\"com.prnv.model.Author\",\"name\":\"Hello\"},\"description\":\"Description\"}"
    @Cacheable(value = "whitePaper", key = "#title")
    public WhitePaper findWhitePaperByTitle(String title) 
    {
        WhitePaper whitePaper = repository.findByTitle(title);
        return whitePaper;
    }