package com.ch.ch6_9;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@EnableCaching
@SpringBootApplication
public class Ch69Application {
public static void main(String[] args) {
SpringApplication.run(Ch69Application.class, args);
}
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> rTemplate = new RedisTemplate<Object, Object>();
rTemplate.setConnectionFactory(redisConnectionFactory);
@SuppressWarnings({"unchecked", "rawtypes"})
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
//设置值的序列化采用Jackson2JsonRedisSerializer
rTemplate.setValueSerializer(jackson2JsonRedisSerializer);
//设置键的序列化采用StringRedisSerializer
rTemplate.setKeySerializer(new StringRedisSerializer());
return rTemplate;
}
}
这段Java代码代表了一个启用了Redis缓存的Spring Boot应用程序。让我们逐步解释这段代码的目的和功能:
-
包和导入:
- 代码位于包
com.ch.ch6_9
中。 - 导入了一些类和注解,以便访问所需的功能。
- 代码位于包
-
注解:
@EnableCaching
:此注解用于启用Spring应用程序的缓存支持。
-
应用程序类:
- 类
Ch69Application
是Spring Boot应用程序的主类。 - 它包含了
main
方法,是应用程序的入口点。 - 方法
SpringApplication.run(Ch69Application.class, args)
用于启动Spring Boot应用程序。
- 类
-
Redis配置:
- 方法
redisTemplate
标记有@Bean
注解,这意味着它将用于创建和配置一个RedisTemplate Bean。 RedisTemplate
是Spring Data Redis提供的用于与Redis交互的类。- 它用于执行对Redis的各种操作,例如获取、设置和删除数据。
- 方法
-
Redis序列化和反序列化:
- Redis以键值对的形式存储数据。在Redis中存储复杂数据类型(如对象)时,需要指定如何进行序列化和反序列化。
- 在此代码中,使用Jackson库进行Java对象与JSON格式之间的序列化和反序列化。
Jackson2JsonRedisSerializer
是一个Redis序列化器,用于将Java对象转换为JSON格式以便在Redis中存储,反之亦然。
-
ObjectMapper配置:
ObjectMapper
是Jackson提供的处理JSON序列化和反序列化的类。- 在此代码中,创建了一个自定义的
ObjectMapper
,用于配置序列化和反序列化的行为。 om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY)
设置了在JSON序列化中包含属性的可见性规则,它允许包含所有属性。om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL)
启用了非最终类的默认类型信息,这对于正确反序列化JSON对象是必要的。
-
设置RedisTemplate:
- 使用自定义的序列化器和Redis连接工厂来配置
RedisTemplate
。 rTemplate.setValueSerializer(jackson2JsonRedisSerializer)
设置用于在Redis中存储值的序列化器。在这里,使用的是Jackson2JsonRedisSerializer
。rTemplate.setKeySerializer(new StringRedisSerializer())
设置用于Redis键的序列化器。这里使用了StringRedisSerializer
,表示键将以字符串形式存储。
- 使用自定义的序列化器和Redis连接工厂来配置
-
Redis连接工厂:
- 这段代码片段没有显示Redis连接工厂的部分,但预期在应用程序配置的其他地方提供。
RedisConnectionFactory
作为参数被注入到redisTemplate
方法中。
- 这段代码片段没有显示Redis连接工厂的部分,但预期在应用程序配置的其他地方提供。
总体而言,这段代码使用Jackson2JsonRedisSerializer和StringRedisSerializer设置了一个RedisTemplate,进行了自定义序列化和反序列化配置。这使得应用程序能够将Redis作为缓存层,并支持以JSON格式存储和检索Java对象。