前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot一键集成Redis

SpringBoot一键集成Redis

作者头像
码农飞哥
发布2021-08-18 11:17:17
3330
发布2021-08-18 11:17:17
举报
文章被收录于专栏:好好学习好好学习

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

引入依赖

啥都不说,先引入依赖,SpringBoot其实已经整合好了redis,这里就直接使用Spring的redis来操作。

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. <version>2.1.2.RELEASE</version>
  5. </dependency>

Redis的配置

最简单的配置(单机模式)

直接在application.yml 添加如下配置:

  1. spring:
  2. redis:
  3. host: 127.0.0.1
  4. password: 123456
  5. port: 6379
  6. database: 1

配置好之后就可以直接使用StringRedisTemplate 以及RedisTemplate两个redis客户端的操作类了。这是由于SpringBoot的自动配置,SpringBoot通过RedisProperties类来映射yml中的Redis配置,通过RedisAutoConfiguration配置类来加载Redis配置。

哨兵模式配置

1.在yml文件中配置好哨兵

  1. spring:
  2. redis:
  3. sentinel:
  4. master: mymaster
  5. nodes: 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
  6. password: 123456
  7. lettuce:
  8. pool:
  9. max-idle: 30
  10. database: 1
2. 定义配置类
  1. // 定义配置类
  2. @Configuration
  3. // 启动自动配置
  4. @EnableAutoConfiguration
  5. public class RedisSentinelConfig {
  6. private static Logger logger = LoggerFactory.getLogger(RedisSentinelConfig.class);
  7. @Value("#{'${spring.redis.sentinel.nodes}'.split(',')}")
  8. private List<String> nodes;
  9. @Value("${spring.redis.password}")
  10. private String password;
  11. @Value("${spring.redis.sentinel.nodes}")
  12. private String redisNodes;
  13. @Value("${spring.redis.sentinel.master}")
  14. private String master;
  15. // 定义redis的连接池
  16. @Bean(name = "poolConfig")
  17. @ConfigurationProperties(prefix = "spring.redis")
  18. public JedisPoolConfig poolConfig() {
  19. JedisPoolConfig poolConfig = new JedisPoolConfig();
  20. return poolConfig;
  21. }
  22. //定义RedisSentinelConfiguration,用于设置哨兵
  23. @Bean
  24. public RedisSentinelConfiguration sentinelConfiguration() {
  25. RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();
  26. //配置matser的名称
  27. redisSentinelConfiguration.master(master);
  28. //数据库是1库
  29. redisSentinelConfiguration.setDatabase(1);
  30. redisSentinelConfiguration.setPassword(password);
  31. //配置redis的哨兵sentinel
  32. Set<RedisNode> redisNodeSet = new HashSet<>();
  33. nodes.forEach(x -> {
  34. redisNodeSet.add(new RedisNode(x.split(":")[0], Integer.parseInt(x.split(":")[1])));
  35. });
  36. logger.info("redisNodeSet -->" + redisNodeSet);
  37. redisSentinelConfiguration.setSentinels(redisNodeSet);
  38. return redisSentinelConfiguration;
  39. }
  40. //定义工厂类
  41. @Bean
  42. public JedisConnectionFactory redisConnectionFactory(
  43. JedisPoolConfig poolConfig,
  44. RedisSentinelConfiguration sentinelConfig) {
  45. return new JedisConnectionFactory(sentinelConfig, poolConfig);
  46. }

这样就定义好了。

源码分析

RedisAutoConfiguration配置类的代码如下;

  1. @Configuration
  2. @ConditionalOnClass(RedisOperations.class)
  3. @EnableConfigurationProperties(RedisProperties.class)
  4. @Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
  5. public class RedisAutoConfiguration {
  6. //定义了RedisTemplate<Object, Object>的实例,只有当存在名为redisTemplate的时才启动
  7. @Bean
  8. @ConditionalOnMissingBean(name = "redisTemplate")
  9. public RedisTemplate<Object, Object> redisTemplate(
  10. RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
  11. RedisTemplate<Object, Object> template = new RedisTemplate<>();
  12. template.setConnectionFactory(redisConnectionFactory);
  13. return template;
  14. }
  15. //定义了StringRedisTemplate的实例
  16. @Bean
  17. @ConditionalOnMissingBean
  18. public StringRedisTemplate stringRedisTemplate(
  19. RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
  20. StringRedisTemplate template = new StringRedisTemplate();
  21. template.setConnectionFactory(redisConnectionFactory);
  22. return template;
  23. }
  24. }

代码说明:

  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配置需要自己定义配置类。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农飞哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引入依赖
  • Redis的配置
    • 最简单的配置(单机模式)
    • 哨兵模式配置
      • 1.在yml文件中配置好哨兵
        • 2. 定义配置类
    • 源码分析
    • 总结
    相关产品与服务
    云数据库 Redis
    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档