赞
踩
分析源码,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呢?
源码中的模板对于数据序列化是这么处理的
二、编写流程
在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;
- }
- }
- @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来传递对象,所以转化的方法很重要!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。