了解redis在springboot中的自动配置类
分析源码,SpringBoot的底层,会对每一个功能都写一个自动配置类autoXXX,所以Redis也会存在。
找到这个自动配置类,分析这个配置类做了哪些事儿
另外每一个自动配置类都和一个.properties配置类进行绑定,我们可以通过他绑定的方式,在application.properties中个性化的配置
集成方法
一、导入整合的依赖
<!-- 操作redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
二、配置连接,在application.properties中写
#配置Redis
#配置主机
spring.redis.host=127.0.0.1
#配置端口
spring.redis.port=6379
三、测试
@SpringBootTest
class SpringbootRedisApplicationTests {
//想在springboot中使用redis,首先先将spring中给我们写的模板注入进来
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
//可以操作不同的数据类型......
//操作字符串,类似于String
redisTemplate.opsForValue().set("name","张三");
//操作List集合,类似于List
redisTemplate.opsForList();
//除了基本的操作,我们还可以直接操作redisTemplate来执行事务或者增删改查
}
}
自定义RedisTemplate(学习配置的内容)
一、首先我们需要了解为什么我们非得要自定义redisTemplate呢?
源码中的模板对于数据序列化是这么处理的
二、编写流程
在config包下新建一个类,命名为RedisConfig,将来关于Redis的配置都写在这个类中即可
这段配置,如果我们真正项目中用到了redis,直接拿着用
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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;
//Redis配置类,需要用@Configuration注解标记这个类是一个配置类
//现在这个配置类是一个固定的模板,如果需要配置redis,直接拿走用即可
@Configuration
public class RedisConfig {
//编写我们自己的RedisTemplate
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory);
//Json序列化配置
//设置序列化的方式,想要用jackson序列化,直接new出它的对象,传object.class,表示解析任何的对象,放进setKeySerializer方法中即可
Jackson2JsonRedisSerializer<Object> objectJackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
objectJackson2JsonRedisSerializer.setObjectMapper(om);
//string的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
//hash的key采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//value的序列化采用jackson
template.setValueSerializer(objectJackson2JsonRedisSerializer);
//hash的value采用jackson
template.setHashValueSerializer(objectJackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
拓展:将常规对象转化成json对象的方法(序列化的重要性)
@SpringBootTest
class SpringbootRedisApplicationTests {
//想在springboot中使用redis,首先先将spring中给我们写的模板注入进来
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
//可以操作不同的数据类型......
//操作字符串,类似于String
redisTemplate.opsForValue().set("name","张三");
//操作List集合,类似于List
redisTemplate.opsForList();
//除了基本的操作,我们还可以直接操作redisTemplate来执行事务或者增删改查
}
@Test
public void test() throws JsonProcessingException {
//真是开发中一般都是使用json来传递对象
User user = new User("张三",12);
//调用ObjectMapper()方法,调用writeValueAsString方法将常规的对象转化成json对象
String jsonUser = new ObjectMapper().writeValueAsString(user);
redisTemplate.opsForValue().set("user",jsonUser);
redisTemplate.opsForValue().get("user");
}
}
序列化在将来的企业级开发中是非常常见的,所有的pojo类基本上都要先实现serializable接口,我们系统默认的序列化的方式是jdk,如果想要自定义序列化的方式,那么就要去上文中复习自定义的方法!
真实的开发中都是用json来传递对象,所以转化的方法很重要!