简单一文了解SpringBoot与Redis的整合(哨兵模式)

举报
码农飞哥 发表于 2021/05/29 11:09:17 2021/05/29
3.3k+ 0 0
【摘要】 您好,我是码农飞哥,感谢您阅读本文!本文主要介绍SpringBoot如何整合Redis。 文章目录 引入依赖Redis的配置最简单的配置(单机模式) 哨兵模式配置1.在yml文件中配置好哨兵2. 定义配置类 源码分析总结 引入依赖 啥都不说,先引入依赖,SpringBoot其实已经整合好了redis,这里就直接使用Spring的redis来操作。...

您好,我是码农飞哥,感谢您阅读本文!本文主要介绍SpringBoot如何整合Redis。

引入依赖

啥都不说,先引入依赖,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: 1

  
 

2. 定义配置类

// 定义配置类
@Configuration
// 启动自动配置
@EnableAutoConfiguration
public class RedisSentinelConfig { private static Logger logger = LoggerFactory.getLogger(RedisSentinelConfig.class); @Value("#{'${spring.redis.sentinel.nodes}'.split(',')}") private List<String> nodes; @Value("${spring.redis.password}") private String password; @Value("${spring.redis.sentinel.nodes}") private String redisNodes; @Value("${spring.redis.sentinel.master}") private String master; // 定义redis的连接池 @Bean(name = "poolConfig") @ConfigurationProperties(prefix = "spring.redis") public JedisPoolConfig poolConfig() { JedisPoolConfig poolConfig = new JedisPoolConfig(); return poolConfig; } //定义RedisSentinelConfiguration,用于设置哨兵 @Bean 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; }

	//定义工厂类 @Bean public JedisConnectionFactory redisConnectionFactory( JedisPoolConfig poolConfig, RedisSentinelConfiguration sentinelConfig) { return new JedisConnectionFactory(sentinelConfig, poolConfig); }

  
 

这样就定义好了。

源码分析

RedisAutoConfiguration配置类的代码如下;

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration { //定义了RedisTemplate<Object, Object>的实例,只有当存在名为redisTemplate的时才启动
	@Bean
	@ConditionalOnMissingBean(name = "redisTemplate")
	public RedisTemplate<Object, Object> redisTemplate( RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
		RedisTemplate<Object, Object> template = new RedisTemplate<>();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}

	//定义了StringRedisTemplate的实例
	@Bean
	@ConditionalOnMissingBean
	public StringRedisTemplate stringRedisTemplate( RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
		StringRedisTemplate template = new StringRedisTemplate();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}

}

  
 

代码说明:

  1. @Configuration注解标记RedisAutoConfiguration类是一个配置类,可以替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。通过该注解之后可以保证Bean是单例的。
  2. @ConditionalOnClass 的作用是定义条件装配,只有当RedisOperations类存在时才启动该配置
  3. @EnableConfigurationProperties 的作用是开启@ConfigurationProperties。@ConfigurationProperties的作用是将配置文件转换成类对象,便于修改或者获取值。
  4. @Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })的作用是引入LettuceConnectionConfiguration和JedisConnectionConfiguration两个配置类,其中LettuceConnectionConfiguration配置类中定义了LettuceConnectionFactory连接工厂类,JedisConnectionConfiguration定义了JedisConnectionFactory连接工厂类。

总结

本文详细介绍了如何在SpringBoot中整合Redis。最简单的单机模式的Redis整合只需要在yml文件中配置redis数据库的地址即可,其他哨兵模式和集群模式的Redis配置需要自己定义配置类。

文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。

原文链接:feige.blog.csdn.net/article/details/113246300

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。