在spring boot集成redis只需要导redis的启动器就可以了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
1、创建项目并测试
1、创建一个springboot项目 2、添加redis启动器 3、如果redis不是在本机上,我们需要在application.yml中配置,如果是本机,跳过即可。
spring:
redis:
host: 192.168.65.131
port: 6379
database: 0
4、测试 spring boot给我们写了一个模板RedisTemplate ,我们可以向操作jedis一样去操作我们的redis,但是稍有区别。
@Autowired
RedisTemplate redisTemplate;
@Test
void contextLoads() {
Set keys = redisTemplate.keys("*");
keys.forEach(System.out::println);
redisTemplate.opsForValue().set("name","tx");
System.out.println(redisTemplate.opsForValue().get("name"));
}
这时候你会发现,原本你redis里面是有值的,但是你在获取所有值的时候却没有获取到,而你在这设置的key却能获取到。 在终端看看: 难道是方言不一样?
2、redis配置类
1、redis不能直接存对象,每个对象都需要序列化 2、spring boot默认是使用JDK进行序列化的,这就会出现一些方言不一样的问题,我们需要修改。 3、创建一个配置类
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
template.setDefaultSerializer(jsonRedisSerializer);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
注意:如果说jackson找不到,那就加依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.4</version>
</dependency>
然后再重新测试一下: 就可以了。
3、源码分析,升华
众所周知,在spring boot中 redis有一个RedisAutoConfiguration 自动配置类。 1、为什么我们写了配置类,官方的就失效了 我们可以看到官方的配置是很少的,这给了我们很多自定义的空间。
2、默认序列化器是JDK 点进RedisTemplate 可以看到,默认的序列化器就是JDK 3、配置都可以写什么? 点进RedisProperties ,我们可以看到很多默认的配置。 其他默认配置就不展示了,自己动手丰衣足食~
|