您好,我是码农飞哥,感谢您阅读本文!本文主要介绍SpringBoot如何整合Redis。
 
文章目录
- 引入依赖
 - Redis的配置
 
- 最简单的配置(单机模式)
 
- 哨兵模式配置
 
- 1.在yml文件中配置好哨兵
 
- 2. 定义配置类
 
- 源码分析
 - 总结
 
引入依赖
啥都不说,先引入依赖,SpringBoot其实已经整合好了redis,这里就直接使用Spring的redis来操作。
<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                <version>2.1.2.RELEASE</version>
            </dependency>Redis的配置
最简单的配置(单机模式)
直接在application.yml 添加如下配置:
spring:
  redis:
    host: 127.0.0.1
    password: 123456
    port: 6379
    database: 1配置好之后就可以直接使用StringRedisTemplate 以及RedisTemplate<Object, Object> 两个redis客户端的操作类了。这是由于SpringBoot的自动配置,SpringBoot通过RedisProperties类来映射yml中的Redis配置,通过RedisAutoConfiguration配置类来加载Redis配置。
哨兵模式配置
1.在yml文件中配置好哨兵
spring:
  redis:
    sentinel:
      master: mymaster
      nodes: 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
    password: 123456
    lettuce:
      pool:
        max-idle: 30
    database: 12. 定义配置类
// 定义配置类
// 启动自动配置
public class RedisSentinelConfig {
    private static Logger logger = LoggerFactory.getLogger(RedisSentinelConfig.class);
    ("#{'${spring.redis.sentinel.nodes}'.split(',')}")
    private List<String> nodes;
    ("${spring.redis.password}")
    private String password;
    ("${spring.redis.sentinel.nodes}")
    private String redisNodes;
    ("${spring.redis.sentinel.master}")
    private String master;
  // 定义redis的连接池
    (name = "poolConfig")
    (prefix = "spring.redis")
    public JedisPoolConfig poolConfig() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        return poolConfig;
    }
  
  //定义RedisSentinelConfiguration,用于设置哨兵
    
    public RedisSentinelConfiguration sentinelConfiguration() {
        RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
        //配置matser的名称
        redisSentinelConfiguration.master(master);
        //数据库是1库
        redisSentinelConfiguration.setDatabase(1);
        redisSentinelConfiguration.setPassword(password);
        //配置redis的哨兵sentinel
        Set<RedisNode> redisNodeSet = new HashSet<>();
        nodes.forEach(x -> {
            redisNodeSet.add(new RedisNode(x.split(":")[0], Integer.parseInt(x.split(":")[1])));
        });
        logger.info("redisNodeSet -->" + redisNodeSet);
        redisSentinelConfiguration.setSentinels(redisNodeSet);
        return redisSentinelConfiguration;
    }
  //定义工厂类
    
    public JedisConnectionFactory redisConnectionFactory(
            JedisPoolConfig poolConfig,
            RedisSentinelConfiguration sentinelConfig) {
        return new JedisConnectionFactory(sentinelConfig, poolConfig);
    }这样就定义好了。
源码分析
RedisAutoConfiguration配置类的代码如下;
(RedisOperations.class)
(RedisProperties.class)
({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
  
  //定义了RedisTemplate<Object, Object>的实例,只有当存在名为redisTemplate的时才启动
  
  (name = "redisTemplate")
  public RedisTemplate<Object, Object> redisTemplate(
      RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    RedisTemplate<Object, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
  }
  //定义了StringRedisTemplate的实例
  
  
  public StringRedisTemplate stringRedisTemplate(
      RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    StringRedisTemplate template = new StringRedisTemplate();
    template.setConnectionFactory(redisConnectionFactory);
    return template;
  }
}代码说明:
- 
@Configuration注解标记RedisAutoConfiguration类是一个配置类,可以替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。通过该注解之后可以保证Bean是单例的。 - 
@ConditionalOnClass 的作用是定义条件装配,只有当RedisOperations类存在时才启动该配置 - 
@EnableConfigurationProperties 的作用是开启@ConfigurationProperties。@ConfigurationProperties的作用是将配置文件转换成类对象,便于修改或者获取值。 - 
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })的作用是引入LettuceConnectionConfiguration和JedisConnectionConfiguration两个配置类,其中LettuceConnectionConfiguration配置类中定义了LettuceConnectionFactory连接工厂类,JedisConnectionConfiguration定义了JedisConnectionFactory连接工厂类。 
总结
本文详细介绍了如何在SpringBoot中整合Redis。最简单的单机模式的Redis整合只需要在yml文件中配置redis数据库的地址即可,其他哨兵模式和集群模式的Redis配置需要自己定义配置类。
                
                










