• 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.redissongroupId>
    3. <artifactId>redisson-spring-boot-starterartifactId>
    4. <version>3.21.1version>
    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. }

     

     

  • 相关阅读:
    地图可视化 | 8月22日重庆山火分布地图及制作方法
    Docker:Elasticsearch安装配置IK分词器
    概念题总结
    换挡周期下,谁将成为厨电品牌的进取者?
    一文带你了解 JS Module 的始末
    Java关于数组
    QT学习日记8——资源文件添加
    【毕业设计】深度学习人体语义分割在弹幕防遮挡上的实现 - python
    程序员工作压力大,年轻人放弃互联网了?
    【前端精进之路】JS篇:第4期 作用域
  • 原文地址:https://blog.csdn.net/u011974797/article/details/138162758