小工具知识网

当前位置: 首页 > 行业知识 > Spring Boot整合Redisson的两种方式

行业知识

Spring Boot整合Redisson的两种方式

2026-11-10 04:29:52 来源:互联网转载

项目场景

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依赖:

org.redissonredisson-spring-boot-starter3.21.1

集成方案:

方式一:使用yml配置

1.单节点配置

单节点配置可以兼容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在同级,目录结构如下:

2.集群模式配置 

集群模式不能兼容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);    }}

 

 

上一篇:网上租客怎么控制服务器?

下一篇:育碧服务器怎么中文?