当前位置:   article > 正文

Spring Boot整合Redisson的两种方式

Spring Boot整合Redisson的两种方式

项目场景

Spring Boot整合Redisson的两种方式,方式一直接使用yml配置,方式二创建RedissonConfig配置类。


前言

redisson和redis区别:

  1. Redis是一个开源的内存数据库,支持多种数据类型,如字符串、哈希、列表、集合和有序集合等,常用于缓存、消息队列、计数器、分布式锁和搜索等应用场景。
  2. Redisson则是一个基于Redis实现的Java驻内存数据网格,提供了一系列分布式的Java常用对象和多种锁机制,以及分布式服务,使开发者能更集中于处理业务逻辑。
  3. Redisson不支持字符串操作、排序、事务、管道、分区等Redis特性,但Redisson 提供了许多其他功能,如分布式闭锁、分布式计数器、分布式信号量等。

前提准备 

版本:spring boot2.3.1.RELEASE,redisson3.21.1

maven依赖

  1. <dependency>
  2. <groupId>org.redisson</groupId>
  3. <artifactId>redisson-spring-boot-starter</artifactId>
  4. <version>3.21.1</version>
  5. </dependency>

集成方案:

方式一:使用yml配置

1.单节点配置

单节点配置可以兼容redis的配置方式

application.yml

  1. # redis配置
  2. spring:
  3. redis:
  4. database: 0
  5. host: 127.0.0.1
  6. password: redis@pass
  7. port: 6001

或者使用 redisson.yml文件的方式

application.yml这里引用了redisson.yml文件

  1. spring:
  2. redis:
  3. # redisson配置
  4. redisson:
  5. file: classpath:redisson.yml

redisson.yml

  1. # 单节点配置
  2. singleServerConfig:
  3. # 数据库编号
  4. database: 0
  5. # 节点地址
  6. address: redis://127.0.0.1:6001
  7. # 密码
  8. password: redis@pass

application.yml与 redisson.yml在同级,目录结构如下:

2.集群模式配置 

集群模式不能兼容redis之前的配置方式

application.yml没变

  1. spring:
  2. redis:
  3. # redisson配置
  4. redisson:
  5. file: classpath:redisson.yml

更改redisson.yml内容

  1. # 集群模式
  2. clusterServersConfig:
  3. # 集群节点地址
  4. nodeAddresses:
  5. - "redis://127.0.0.1:18001"
  6. - "redis://127.0.0.1:18002"
  7. - "redis://127.0.0.1:18003"
  8. - "redis://127.0.0.1:18004"
  9. - "redis://127.0.0.1:18005"
  10. - "redis://127.0.0.1:18006"
  11. # 密码
  12. password: redis@pass

Redis集群不支持多个数据库的概念,默认只有一个数据库,即db 0,所以这里是没有database这个参数的。


方式二:创建RedissonConfig配置类

配置类已经兼容单节点和集群模式,参数名可以自定义,数据库默认使用db 0。

application.yml

  1. spring:
  2. redis:
  3. # redisson配置
  4. redisson:
  5. # 如果该值为false,系统将不会创建RedissionClient的bean。
  6. enabled: true
  7. # mode的可用值为,single/cluster/sentinel/master-slave
  8. mode: single
  9. # single: 单机模式
  10. # address: redis://localhost:6379
  11. # cluster: 集群模式
  12. # 每个节点逗号分隔,同时每个节点前必须以redis://开头。
  13. # address: redis://localhost:6379,redis://localhost:6378,...
  14. # sentinel:
  15. # 每个节点逗号分隔,同时每个节点前必须以redis://开头。
  16. # address: redis://localhost:6379,redis://localhost:6378,...
  17. # master-slave:
  18. # 每个节点逗号分隔,第一个为主节点,其余为从节点。同时每个节点前必须以redis://开头。
  19. # address: redis://localhost:6379,redis://localhost:6378,...
  20. address: redis://127.0.0.1:6001
  21. # redis 密码,空可以不填。
  22. password: redis@pass
  23. database: 0

 RedissonConfig

  1. import org.apache.commons.lang3.StringUtils;
  2. import org.redisson.Redisson;
  3. import org.redisson.api.RedissonClient;
  4. import org.redisson.config.Config;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. /**
  10. * Redisson配置类。
  11. */
  12. @Configuration
  13. @ConditionalOnProperty(name = "spring.redis.redisson.enabled", havingValue = "true")
  14. public class RedissonConfig {
  15. @Value("${spring.redis.redisson.mode}")
  16. private String mode;
  17. /**
  18. * 仅仅用于sentinel模式。
  19. */
  20. @Value("${spring.redis.redisson.masterName:}")
  21. private String masterName;
  22. @Value("${spring.redis.redisson.address}")
  23. private String address;
  24. @Value("${spring.redis.redisson.password:}")
  25. private String password;
  26. /**
  27. * 数据库默认0
  28. */
  29. @Value("${spring.redis.redisson.database:0}")
  30. private Integer database;
  31. @Bean
  32. public RedissonClient redissonClient() {
  33. if (StringUtils.isBlank(password)) {
  34. password = null;
  35. }
  36. Config config = new Config();
  37. if ("single".equals(mode)) {
  38. config.useSingleServer()
  39. .setDatabase(database)
  40. .setPassword(password)
  41. .setAddress(address);
  42. } else if ("cluster".equals(mode)) {
  43. String[] clusterAddresses = address.split(",");
  44. config.useClusterServers()
  45. //集群模式不支持多个数据库概念,默认db 0
  46. .setPassword(password)
  47. .addNodeAddress(clusterAddresses);
  48. } else if ("sentinel".equals(mode)) {
  49. String[] sentinelAddresses = address.split(",");
  50. config.useSentinelServers()
  51. .setDatabase(database)
  52. .setPassword(password)
  53. .setMasterName(masterName)
  54. .addSentinelAddress(sentinelAddresses);
  55. } else if ("master-slave".equals(mode)) {
  56. String[] masterSlaveAddresses = address.split(",");
  57. if (masterSlaveAddresses.length == 1) {
  58. throw new IllegalArgumentException(
  59. "redis.redisson.address MUST have multiple redis addresses for master-slave mode.");
  60. }
  61. String[] slaveAddresses = new String[masterSlaveAddresses.length - 1];
  62. System.arraycopy(masterSlaveAddresses, 1, slaveAddresses, 0, slaveAddresses.length);
  63. config.useMasterSlaveServers()
  64. .setDatabase(database)
  65. .setPassword(password)
  66. .setMasterAddress(masterSlaveAddresses[0])
  67. .addSlaveAddress(slaveAddresses);
  68. } else {
  69. throw new IllegalArgumentException(mode);
  70. }
  71. return Redisson.create(config);
  72. }
  73. }

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/504962
推荐阅读
相关标签
  

闽ICP备14008679号