【Spring Boot实战与进阶】Redis配置Fastjson进行序列化和反序列化

2022-05-12 10:09:34 浏览数 (1)

Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用。这个专栏将对Spring Boot框架从浅入深,从实战到进阶,不但我们要懂得如何去使用,还要去剖析框架源码,学习其优秀的设计思想。

汇总目录链接:【Spring Boot实战与进阶】学习目录

文章目录
  • 1、自定义序列化类
  • 2、Redis配置类
  • 3、Java Bean
  • 4、引入依赖
  • 5、配置文件
  • 6、项目启动类
  • 7、查看Redis的数据

  FastJson是阿里开源的一个高性能的JSON框架,FastJson数据处理速度快,无论序列化(把JavaBean对象转化成Json格式的字符串)和反序列化(把JSON格式的字符串转化为Java Bean对象),都是当之无愧的fast;功能强大(支持普通JDK类,包括javaBean, Collection, Date 或者enum);零依赖(没有依赖其他的任何类库)。

1、自定义序列化类

代码语言:javascript复制
/**
 * 自定义序列化类
 * @param <T>
 */
public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {

    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
    private Class<T> clazz;

    public FastJsonRedisSerializer(Class<T> clazz) {
        super();
        this.clazz = clazz;
    }

    @Override
    public byte[] serialize(T t) throws SerializationException {
        if (null == t) {
            return new byte[0];
        }
        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
    }

    @Override
    public T deserialize(byte[] bytes) throws SerializationException {
        if (null == bytes || bytes.length <= 0) {
            return null;
        }
        String str = new String(bytes, DEFAULT_CHARSET);
        return (T) JSON.parseObject(str, clazz);
    }

}

2、Redis配置类

代码语言:javascript复制
@Configuration
public class RedisConfiguration {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(
            RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        //使用fastjson序列化
        FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
        // value值的序列化采用fastJsonRedisSerializer
        template.setValueSerializer(fastJsonRedisSerializer);
        template.setHashValueSerializer(fastJsonRedisSerializer);
        // key的序列化采用StringRedisSerializer
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
}

3、Java Bean

代码语言:javascript复制
@Data
public class Student {
    private Integer studentId;
    private String studentName;
}

4、引入依赖

  pom.xml引入redis和fastjson的依赖,application.yml配置文件别忘了配置Redis的地址。

代码语言:javascript复制
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

 <dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
</dependency>

5、配置文件

代码语言:javascript复制
spring:
  redis:
    host: 127.0.0.1
    port: 6379

6、项目启动类

代码语言:javascript复制
@SpringBootApplication
public class BootRedisApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext
                context = SpringApplication.run(BootRedisApplication.class, args);
        
        Student student = new Student();
        student.setStudentId(101);
        student.setStudentName("学生A");
        
        RedisTemplate cRedisTemplate = context.getBean("redisTemplate", RedisTemplate.class);
        cRedisTemplate.opsForValue().set("student-1", student);

        context.close();
    }
}

7、查看Redis的数据

代码语言:javascript复制
{"@type":"com.example.bootredis.Student","studentId":101,"studentName":"学生A"}

0 人点赞