前言
最新的SpringBoot的相關Starter不少已經省略掉了自定義的@Configuration類,取而代之的是直接在application.yml文件中直接配置,好比Druid如今只須要maven引入其starter並在application.yml文件配置一下就能夠了。今天要說的redis也是這樣的。
究其緣由爲何呢?
由於maven引入的starter裏面已經有寫好的Configuration了,至關於這個工做Starter已經幫咱們作好了,打開你的ide,直接查看源碼java
package org.springframework.boot.autoconfigure.data.redis; @Configuration @ConditionalOnClass(RedisOperations.class) @EnableConfigurationProperties(RedisProperties.class) @Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class }) public class RedisAutoConfiguration { } package org.springframework.boot.autoconfigure.data.redis; import java.time.Duration; import java.util.List; import org.springframework.boot.context.properties.ConfigurationProperties; /** * Configuration properties for Redis. * * @author Dave Syer * @author Christoph Strobl * @author Eddú Meléndez * @author Marco Aust * @author Mark Paluch * @author Stephane Nicoll */ @ConfigurationProperties(prefix = "spring.redis") public class RedisProperties { }
一、配置Redis
step1
配置application.yml文件,這些屬性均可以在上面兩個源碼類裏面獲得解析,這裏使用了lettuce而不是jedis,前者線程池是線程安全的,這個後期再作解釋。node
#redis配置,此處使用lettuce redis: timeout: 5000ms password: 密碼 database: 0 sentinel: nodes: 172.13.37.84:26379,177.15.33.82:26379,172.46.36.82:26379,172.11.31.36:26379,172.14.76.57:26379 master: master lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0
step2
沒有step2了,上面就配置完了。
開玩笑的,上面配置完只能使用StringRedisTemplate,使用其餘類型的RedisTemplate還須要配置序列化redis
@Configuration public class RedisConfig { @Bean public <T> RedisTemplate<String, T> redisTemplateKeyString(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, T> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } /**配置其餘類型的redisTemplate***/ @Bean public RedisTemplate<Object, Object> redisTemplateKeyObject(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } }