2026/2/5 8:02:42
网站建设
项目流程
学校网站建设方案,京东的网站是哪家公司做,景区网站开发,网页设计实验报告分析项目场景
Spring Boot整合Redisson的两种方式#xff0c;方式一直接使用yml配置#xff0c;方式二创建RedissonConfig配置类。前言redisson和redis区别#xff1a;
Redis是一个开源的内存数据库#xff0c;支持多种数据类型#xff0c;如字符串、哈希、列表、集合和有序集…项目场景Spring Boot整合Redisson的两种方式方式一直接使用yml配置方式二创建RedissonConfig配置类。前言redisson和redis区别Redis是一个开源的内存数据库支持多种数据类型如字符串、哈希、列表、集合和有序集合等常用于缓存、消息队列、计数器、分布式锁和搜索等应用场景。Redisson则是一个基于Redis实现的Java驻内存数据网格提供了一系列分布式的Java常用对象和多种锁机制以及分布式服务使开发者能更集中于处理业务逻辑。Redisson不支持字符串操作、排序、事务、管道、分区等Redis特性但Redisson 提供了许多其他功能如分布式闭锁、分布式计数器、分布式信号量等。前提准备版本spring boot2.3.1.RELEASEredisson3.21.1maven依赖dependency groupIdorg.redisson/groupId artifactIdredisson-spring-boot-starter/artifactId version3.21.1/version /dependency集成方案方式一使用yml配置1.单节点配置单节点配置可以兼容redis的配置方式application.yml# redis配置 spring: redis: database: 0 host: 127.0.0.1 password: redispass port: 6001或者使用redisson.yml文件的方式application.yml这里引用了redisson.yml文件spring: redis: # redisson配置 redisson: file: classpath:redisson.ymlredisson.yml# 单节点配置 singleServerConfig: # 数据库编号 database: 0 # 节点地址 address: redis://127.0.0.1:6001 # 密码 password: redispassapplication.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: redispassRedis集群不支持多个数据库的概念默认只有一个数据库即db 0所以这里是没有database这个参数的。方式二创建RedissonConfig配置类配置类已经兼容单节点和集群模式参数名可以自定义数据库默认使用db 0。application.ymlspring: 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: redispass database: 0RedissonConfigimport 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); } }