org.redisson redisson-spring-boot-starter 3.17.7
spring: redis: cluster: nodes: - ip:port - ip:port - ip:port - ip:port - ip:port - ip:port # 密码 password: ******* # 连接超时时间 timeout: 10s # 是否开启ssl ssl: false redisson: # 线程池数量 threads: 8 # Netty线程池数量 nettyThreads: 16 # 集群配置 clusterServersConfig: # 客户端名称 clientName: redisClient # master最小空闲连接数 masterConnectionMinimumIdleSize: 16 # master连接池大小 masterConnectionPoolSize: 32 # slave最小空闲连接数 slaveConnectionMinimumIdleSize: 16 # slave连接池大小 slaveConnectionPoolSize: 64 # 连接空闲超时,单位:毫秒 idleConnectionTimeout: 10000 # 命令等待超时,单位:毫秒 timeout: 3000 # 发布和订阅连接池大小 subscriptionConnectionPoolSize: 50 # 读取模式 readMode: "SLAVE" # 订阅模式 subscriptionMode: "MASTER" cacheGroup: # 用例: @Cacheable(cacheNames="groupId", key="#XXX") 方可使用缓存组配置 - groupId: redissonCacheMap # 组过期时间(脚本监控) ttl: 60000 # 组最大空闲时间(脚本监控) maxIdleTime: 60000 # 组最大长度 maxSize: 0
import lombok.Data; import lombok.NoArgsConstructor; import org.redisson.config.ReadMode; import org.redisson.config.SubscriptionMode; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.List; /** * Redisson 配置属性 * @author zengshichang */ @Data @Component @ConfigurationProperties(prefix = "redisson") public class RedissonProperties { /** * 线程池数量,默认值 = 当前处理核数量 * 2 */ private int threads; /** * Netty线程池数量,默认值 = 当前处理核数量 * 2 */ private int nettyThreads; /** * 单机服务配置 */ private SingleServerConfig singleServerConfig; /** * 集群服务配置 */ private ClusterServersConfig clusterServersConfig; /** * 缓存组 */ private ListcacheGroup; @Data @NoArgsConstructor public static class SingleServerConfig { /** * 客户端名称 */ private String clientName; /** * 最小空闲连接数 */ private int connectionMinimumIdleSize; /** * 连接池大小 */ private int connectionPoolSize; /** * 连接空闲超时,单位:毫秒 */ private int idleConnectionTimeout; /** * 命令等待超时,单位:毫秒 */ private int timeout; /** * 发布和订阅连接池大小 */ private int subscriptionConnectionPoolSize; } @Data @NoArgsConstructor public static class ClusterServersConfig { /** * 客户端名称 */ private String clientName; /** * master最小空闲连接数 */ private int masterConnectionMinimumIdleSize; /** * master连接池大小 */ private int masterConnectionPoolSize; /** * slave最小空闲连接数 */ private int slaveConnectionMinimumIdleSize; /** * slave连接池大小 */ private int slaveConnectionPoolSize; /** * 连接空闲超时,单位:毫秒 */ private int idleConnectionTimeout; /** * 命令等待超时,单位:毫秒 */ private int timeout; /** * 发布和订阅连接池大小 */ private int subscriptionConnectionPoolSize; /** * 读取模式 */ private ReadMode readMode; /** * 订阅模式 */ private SubscriptionMode subscriptionMode; } @Data @NoArgsConstructor public static class CacheGroup { /** * 组id */ private String groupId; /** * 组过期时间 */ private long ttl; /** * 组最大空闲时间 */ private long maxIdleTime; /** * 组最大长度 */ private int maxSize; } }
import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.redisson.api.RedissonClient; import org.redisson.client.codec.StringCodec; import org.redisson.codec.JsonJacksonCodec; import org.redisson.spring.cache.CacheConfig; import org.redisson.spring.cache.RedissonSpringCacheManager; import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import cn.hutool.core.util.ObjectUtil; import java.util.HashMap; import java.util.List; import java.util.Map; /** * redis配置 * @author zengshichang */ @Slf4j @Configuration @EnableCaching @EnableConfigurationProperties(RedissonProperties.class) public class RedisConfig extends CachingConfigurerSupport { @Autowired private RedissonProperties redissonProperties; @Autowired private ObjectMapper objectMapper; @Bean public RedissonAutoConfigurationCustomizer redissonCustomizer() { return config -> { config.setThreads(redissonProperties.getThreads()) .setNettyThreads(redissonProperties.getNettyThreads()) .setCodec(new StringCodec()); RedissonProperties.SingleServerConfig singleServerConfig = redissonProperties.getSingleServerConfig(); if (ObjectUtil.isNotNull(singleServerConfig)) { // 使用单机模式 config.useSingleServer() .setTimeout(singleServerConfig.getTimeout()) .setClientName(singleServerConfig.getClientName()) .setIdleConnectionTimeout(singleServerConfig.getIdleConnectionTimeout()) .setSubscriptionConnectionPoolSize(singleServerConfig.getSubscriptionConnectionPoolSize()) .setConnectionMinimumIdleSize(singleServerConfig.getConnectionMinimumIdleSize()) .setConnectionPoolSize(singleServerConfig.getConnectionPoolSize()); } // 集群配置方式 参考下方注释 RedissonProperties.ClusterServersConfig clusterServersConfig = redissonProperties.getClusterServersConfig(); if (ObjectUtil.isNotNull(clusterServersConfig)) { config.useClusterServers() .setTimeout(clusterServersConfig.getTimeout()) .setClientName(clusterServersConfig.getClientName()) .setIdleConnectionTimeout(clusterServersConfig.getIdleConnectionTimeout()) .setSubscriptionConnectionPoolSize(clusterServersConfig.getSubscriptionConnectionPoolSize()) .setMasterConnectionMinimumIdleSize(clusterServersConfig.getMasterConnectionMinimumIdleSize()) .setMasterConnectionPoolSize(clusterServersConfig.getMasterConnectionPoolSize()) .setSlaveConnectionMinimumIdleSize(clusterServersConfig.getSlaveConnectionMinimumIdleSize()) .setSlaveConnectionPoolSize(clusterServersConfig.getSlaveConnectionPoolSize()) .setReadMode(clusterServersConfig.getReadMode()) .setSubscriptionMode(clusterServersConfig.getSubscriptionMode()); } log.info("初始化 redis 配置"); }; } /** * 整合spring-cache */ @Bean public CacheManager cacheManager(RedissonClient redissonClient) { ListcacheGroup = redissonProperties.getCacheGroup(); Map config = new HashMap<>(16); for (RedissonProperties.CacheGroup group : cacheGroup) { CacheConfig cacheConfig = new CacheConfig(group.getTtl(), group.getMaxIdleTime()); cacheConfig.setMaxSize(group.getMaxSize()); config.put(group.getGroupId(), cacheConfig); } return new RedissonSpringCacheManager(redissonClient, config, new JsonJacksonCodec(objectMapper)); } }
注:EnableConfigurationPropertiess用法:
@EnableConfigurationProperties(RedissonProperties.class)是一个注解,用于启用将指定的配置类作为配置属性进行自动配置。 在Spring Boot应用程序中,通常使用@EnableConfigurationProperties注解来启用将配置属性绑定到特定的配置类。在这种情况下,RedissonProperties是用于绑定与Redisson相关的配置属性的配置类。 通过使用@EnableConfigurationProperties(RedissonProperties.class)注解,可以实现以下几点: 将RedissonProperties类作为配置属性类进行注册和加载。 自动将应用程序配置文件中与RedissonProperties相关的属性值与RedissonProperties类中的字段进行绑定。 可以通过在代码中注入RedissonProperties类的实例来获得配置的属性值,从而在应用程序中使用这些属性值。 这样,通过@EnableConfigurationProperties(RedissonProperties.class)注解,Redisson的配置属性就会被正确地加载和绑定,并能够在应用程序中使用这些配置。
@RequiredArgsConstructor @Service @Slf4j @RefreshScope public class ServiceImpl implements IService { @Autowired private RedisDao redisDao; }