Spring Boot整合Redisson的两种方式

打印 上一主题 下一主题

主题 550|帖子 550|积分 1650

项目场景

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

前言

   redisson和redis区别:
  

  • Redis是一个开源的内存数据库,支持多种数据类型,如字符串、哈希、列表、聚集和有序聚集等,常用于缓存、消息队列、计数器、分布式锁和搜索等应用场景。
  • Redisson则是一个基于Redis实现的Java驻内存数据网格,提供了一系列分布式的Java常用对象和多种锁机制,以及分布式服务,使开辟者能更集中于处理惩罚业务逻辑。
  • 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. }
复制代码
 
 




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

滴水恩情

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表