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

XML 复制代码
<dependency>
	<groupId>org.redisson</groupId>
	<artifactId>redisson-spring-boot-starter</artifactId>
	<version>3.21.1</version>
</dependency>

集成方案:

方式一:使用yml配置

1.单节点配置

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

application.yml

python 复制代码
# redis配置
spring:
  redis:
    database: 0
    host: 127.0.0.1
    password: redis@pass
    port: 6001

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

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

python 复制代码
spring:
  redis:
    # redisson配置
    redisson:
        file: classpath:redisson.yml

redisson.yml

python 复制代码
# 单节点配置
singleServerConfig:
  # 数据库编号
  database: 0
  # 节点地址
  address: redis://127.0.0.1:6001
  # 密码
  password: redis@pass

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

2.集群模式配置

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

application.yml没变

python 复制代码
spring:
  redis:
    # redisson配置
    redisson:
        file: classpath:redisson.yml

更改redisson.yml内容

python 复制代码
# 集群模式
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

python 复制代码
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

java 复制代码
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);
    }
}
相关推荐
IT学长编程9 分钟前
计算机毕业设计 Java酷听音乐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·音乐系统·计算机毕业设计选题
IT学长编程26 分钟前
计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·毕业论文·协同过滤算法·计算机毕业设计选题·个性化音乐推荐系统
小小娥子31 分钟前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
DieSnowK33 分钟前
[Redis][集群][下]详细讲解
数据库·redis·分布式·缓存·集群·高可用·新手向
华农第一蒟蒻41 分钟前
Java中JWT(JSON Web Token)的运用
java·前端·spring boot·json·token
计算机学姐1 小时前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis
老华带你飞1 小时前
公寓管理系统|SprinBoot+vue夕阳红公寓管理系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot·课程设计
程序员陆通2 小时前
Spring Boot RESTful API开发教程
spring boot·后端·restful
我是浮夸3 小时前
MyBatisPlus——学习笔记
java·spring boot·mybatis
杨荧3 小时前
【JAVA开源】基于Vue和SpringBoot的水果购物网站
java·开发语言·vue.js·spring boot·spring cloud·开源