赞
踩
Spring Boot整合Redisson的两种方式,方式一直接使用yml配置,方式二创建RedissonConfig配置类。
redisson和redis区别:
- Redis是一个开源的内存数据库,支持多种数据类型,如字符串、哈希、列表、集合和有序集合等,常用于缓存、消息队列、计数器、分布式锁和搜索等应用场景。
- Redisson则是一个基于Redis实现的Java驻内存数据网格,提供了一系列分布式的Java常用对象和多种锁机制,以及分布式服务,使开发者能更集中于处理业务逻辑。
- Redisson不支持字符串操作、排序、事务、管道、分区等Redis特性,但Redisson 提供了许多其他功能,如分布式闭锁、分布式计数器、分布式信号量等。
版本:spring boot2.3.1.RELEASE,redisson3.21.1
maven依赖:
- <dependency>
- <groupId>org.redisson</groupId>
- <artifactId>redisson-spring-boot-starter</artifactId>
- <version>3.21.1</version>
- </dependency>
方式一:使用yml配置
单节点配置可以兼容redis的配置方式
application.yml
- # redis配置
- spring:
- redis:
- database: 0
- host: 127.0.0.1
- password: redis@pass
- port: 6001
或者使用 redisson.yml文件的方式
application.yml这里引用了redisson.yml文件
- spring:
- redis:
- # redisson配置
- redisson:
- file: classpath:redisson.yml
redisson.yml
- # 单节点配置
- singleServerConfig:
- # 数据库编号
- database: 0
- # 节点地址
- address: redis://127.0.0.1:6001
- # 密码
- password: redis@pass
application.yml与 redisson.yml在同级,目录结构如下:
集群模式不能兼容redis之前的配置方式
application.yml没变
- spring:
- redis:
- # redisson配置
- redisson:
- file: classpath:redisson.yml
更改redisson.yml内容
- # 集群模式
- clusterServersConfig:
- # 集群节点地址
- nodeAddresses:
- - "redis://127.0.0.1:18001"
- - "redis://127.0.0.1:18002"
- - "redis://127.0.0.1:18003"
- - "redis://127.0.0.1:18004"
- - "redis://127.0.0.1:18005"
- - "redis://127.0.0.1:18006"
- # 密码
- password: redis@pass
Redis集群不支持多个数据库的概念,默认只有一个数据库,即db 0,所以这里是没有database这个参数的。
方式二:创建RedissonConfig配置类
配置类已经兼容单节点和集群模式,参数名可以自定义,数据库默认使用db 0。
application.yml
- spring:
- redis:
- # redisson配置
- redisson:
- # 如果该值为false,系统将不会创建RedissionClient的bean。
- enabled: true
- # mode的可用值为,single/cluster/sentinel/master-slave
- mode: single
- # single: 单机模式
- # address: redis://localhost:6379
- # cluster: 集群模式
- # 每个节点逗号分隔,同时每个节点前必须以redis://开头。
- # address: redis://localhost:6379,redis://localhost:6378,...
- # sentinel:
- # 每个节点逗号分隔,同时每个节点前必须以redis://开头。
- # address: redis://localhost:6379,redis://localhost:6378,...
- # master-slave:
- # 每个节点逗号分隔,第一个为主节点,其余为从节点。同时每个节点前必须以redis://开头。
- # address: redis://localhost:6379,redis://localhost:6378,...
- address: redis://127.0.0.1:6001
- # redis 密码,空可以不填。
- password: redis@pass
- database: 0
RedissonConfig
- import org.apache.commons.lang3.StringUtils;
- import org.redisson.Redisson;
- import org.redisson.api.RedissonClient;
- import org.redisson.config.Config;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
-
- /**
- * Redisson配置类。
- */
- @Configuration
- @ConditionalOnProperty(name = "spring.redis.redisson.enabled", havingValue = "true")
- public class RedissonConfig {
-
- @Value("${spring.redis.redisson.mode}")
- private String mode;
-
- /**
- * 仅仅用于sentinel模式。
- */
- @Value("${spring.redis.redisson.masterName:}")
- private String masterName;
-
- @Value("${spring.redis.redisson.address}")
- private String address;
-
- @Value("${spring.redis.redisson.password:}")
- private String password;
-
- /**
- * 数据库默认0
- */
- @Value("${spring.redis.redisson.database:0}")
- private Integer database;
-
- @Bean
- public RedissonClient redissonClient() {
- if (StringUtils.isBlank(password)) {
- password = null;
- }
- Config config = new Config();
- if ("single".equals(mode)) {
- config.useSingleServer()
- .setDatabase(database)
- .setPassword(password)
- .setAddress(address);
- } else if ("cluster".equals(mode)) {
- String[] clusterAddresses = address.split(",");
- config.useClusterServers()
- //集群模式不支持多个数据库概念,默认db 0
- .setPassword(password)
- .addNodeAddress(clusterAddresses);
- } else if ("sentinel".equals(mode)) {
- String[] sentinelAddresses = address.split(",");
- config.useSentinelServers()
- .setDatabase(database)
- .setPassword(password)
- .setMasterName(masterName)
- .addSentinelAddress(sentinelAddresses);
- } else if ("master-slave".equals(mode)) {
- String[] masterSlaveAddresses = address.split(",");
- if (masterSlaveAddresses.length == 1) {
- throw new IllegalArgumentException(
- "redis.redisson.address MUST have multiple redis addresses for master-slave mode.");
- }
- String[] slaveAddresses = new String[masterSlaveAddresses.length - 1];
- System.arraycopy(masterSlaveAddresses, 1, slaveAddresses, 0, slaveAddresses.length);
- config.useMasterSlaveServers()
- .setDatabase(database)
- .setPassword(password)
- .setMasterAddress(masterSlaveAddresses[0])
- .addSlaveAddress(slaveAddresses);
- } else {
- throw new IllegalArgumentException(mode);
- }
- return Redisson.create(config);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。