1.简介

SpringBoot整合Redis的方法百度一下即可,但是,我更想知道官方文档是如何介绍SpringBoot整合Redis的方式。https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.nosql

2.官方文档阅读

SpringData项目提供了整合各种NoSQL技术的方案。SpringBoot为Redis、MongoDB、ES等NoSQL数据库提供了自动配置(简单理解就是引入依赖就可以使用)。
SpringBoot提供了基础的自动配置为Lettuce客户端和Jedis客户端。使用spring-boot-starter-data-redis即可使用。默认使用的是Lettuce客户端。
在完成上述引入后,你可以在程序中注入使用RedisConnectionFactoryStringRedisTemplateRedisTemplate。你可以使用@Bean的方式覆盖上面的Bean,除了RedisTemplate,因为它只能使用redisTemplate
启用连接池的方式就是:引入commons-pool2包,并且配置RedisProperties中Pool类型的一个配置即可。

个人感觉官方文档虽然说的不多,但是基本上已经把要点都讲出来了,但是没有Demo,用起来总是让人感觉不踏实。另外,好多博客中,都会去配置RedisTemplate的key-value序列化。如何配置并未提到。

3.POM以及YAML的配置

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.apache.commons</groupId>
  7. <artifactId>commons-pool2</artifactId>
  8. </dependency>

3.1连接单例

  1. # 数据源配置
  2. spring:
  3. redis:
  4. host: ip地址
  5. port: 端口
  6. database: 0
  7. lettuce:
  8. pool:
  9. max-active: 8
  10. max-idle: 8
  11. min-idle: 0

3.2连接集群

  1. spring:
  2. redis:
  3. timeout: 6000ms
  4. database: 0
  5. cluster:
  6. nodes:
  7. - ip:port
  8. - ip:port
  9. - ip:port
  10. - ip:port
  11. - ip:port
  12. - ip:port
  13. lettuce:
  14. pool:
  15. max-active: 10
  16. max-idle: 10
  17. min-idle: 5

4.RedisTemplate的配置

在第2点中提到的3个Bean都可以自己去配置。但是需要配置的就是RedisTemplate,一般配置其key和Value的序列化。StringRedisTemplate(SRT)继承自RedisTemplate<K,V>,SRT的key和value均是String类型,一般我们配置RedisTemplate为<String,Object>类型,并对序列化进行设置即可。
配置如下(大家可以自行百度):

  1. public class RedisConfig
  2. @Bean
  3. public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
  4. {
  5. Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
  6. ObjectMapper om = new ObjectMapper();
  7. om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  8. om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  9. jackson2JsonRedisSerializer.setObjectMapper(om);
  10. RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
  11. template.setConnectionFactory(redisConnectionFactory);
  12. template.setKeySerializer(jackson2JsonRedisSerializer);
  13. template.setValueSerializer(jackson2JsonRedisSerializer);
  14. template.setHashKeySerializer(jackson2JsonRedisSerializer);
  15. template.setHashValueSerializer(jackson2JsonRedisSerializer);
  16. template.afterPropertiesSet();
  17. return template;
  18. }

之后在项目中如下引用即可
@Resource<br />private RedisTemplate<String,Object> redisTemplate;