RedisTemplate系列化器之GenericJackson2JsonRedisSerializer

9 篇文章 0 订阅
8 篇文章 0 订阅

Redis作为高速缓存数据库,目前应用非常广泛。RedisTemplate是Spring提供用于操作redis数据库的一个类。
将数据存放到Redis中,以及数据读取。这里必然涉及到数据的系列化和反系列化。RedisTemplate默认的系列化类是JdkSerializationRedisSerializer,用JdkSerializationRedisSerializer序列化的话,被序列化的对象必须实现Serializable接口。在存储内容时,除了属性的内容外还存了其它内容在里面,总长度长,且不容易阅读。
我们要求是存储的数据可以方便查看,也方便反系列化,方便读取数据。
JacksonJsonRedisSerializer和GenericJackson2JsonRedisSerializer,两者都能系列化成json,但是后者会在json中加入@class属性,类的全路径包名,方便反系列化。前者如果存放了List则在反系列化的时候如果没指定TypeReference则会报错java.util.LinkedHashMap cannot be cast to 。

在项目中我们可以灵活设置RedisTemplate的系列化器。
这里写图片描述

我们可以看到RedisTemplate里面定义了key,value,hashKey,haskValue等键,值的系列化器,我们可以自己方便的修改。如果没有设置则会有默认的。
JdkSerializationRedisSerializer。

实例:设置RedisTemplate系列化。GenericJackson2JsonRedisSerializer系列化和反系列化使用的是ObjectMapper

package com.xfl.boot.common.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Created by XFL
 * time on 2017/6/12 23:24
 * description:
 */
@Configuration
public class RedisConfig {
    private static Logger logger = LoggerFactory.getLogger(RedisConfig.class);

    @Bean(name = "springSessionDefaultRedisSerializer")
    public GenericJackson2JsonRedisSerializer getGenericJackson2JsonRedisSerializer() {
        return new GenericJackson2JsonRedisSerializer();
    }
    @Bean
    public RedisTemplate<String, Object> getRedisTemplate(
            JedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(connectionFactory);
        redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        return redisTemplate;
    }
}
//数据取出示例:
RespCallbackDto respCallbackDto = (RespCallbackDto) redisTemplate.opsForHash().get(key, prvId);

这里写图片描述
可以看到保存到redis数据库中的数据是json,并且每个节点都有@class属性,这些属性在凡系列化时会使用到。

参考资料:https://zhuanlan.zhihu.com/p/29195530

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要引入GenericJackson2JsonRedisSerializer,您需要执行以下步骤: 1. 添加Maven依赖项 在您的Maven项目中,添加以下Maven依赖项: ``` <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.3.3.RELEASE</version> </dependency> ``` 2. 配置RedisTemplate 您需要配置RedisTemplate来使用GenericJackson2JsonRedisSerializer。您可以在Spring配置文件中添加以下内容: ``` <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory" /> <property name="keySerializer" ref="stringRedisSerializer" /> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" /> </property> </bean> <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" /> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="localhost" /> <property name="port" value="6379" /> </bean> ``` 在此示例中,我们使用了JedisConnectionFactory来连接到Redis服务,使用StringRedisSerializer作为键序列化,并使用GenericJackson2JsonRedisSerializer作为值序列化。 3. 使用RedisTemplate 现在,您可以使用RedisTemplate将对象序列化为JSON格式并将其存储在Redis中。例如: ``` @Autowired private RedisTemplate<String, Object> redisTemplate; public void saveObject(String key, Object value) { redisTemplate.opsForValue().set(key, value); } public Object getObject(String key) { return redisTemplate.opsForValue().get(key); } ``` 在此示例中,我们使用RedisTemplate将对象存储在Redis中,并使用相同的RedisTemplate检索对象。由于我们已经配置了GenericJackson2JsonRedisSerializer作为值序列化,因此存储在Redis中的对象将自动序列化为JSON格式,并在检索时自动反序列化为原始对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值