package com.whyc.config; import com.whyc.properties.RedisClusterProperties; import com.whyc.properties.RedisPoolProperties; import com.whyc.properties.RedisProperties; import lombok.extern.slf4j.Slf4j; import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import org.springframework.util.StringUtils; @Configuration @EnableConfigurationProperties(RedisProperties.class) @Slf4j public class RedisConfig { @Autowired RedisProperties redisProperties; /** * redis单机 */ @Bean("redisClient") @ConditionalOnProperty(name = "redis.model", havingValue = "single") @Order(1) RedissonClient redissonClientSingle() { log.error("redis single client初始化了"); Config config = new Config(); String node = redisProperties.getSingle().getAddress(); SingleServerConfig serverConfig = config.useSingleServer() .setAddress(node) .setTimeout(redisProperties.getTimeout()) .setConnectionPoolSize(redisProperties.getPool().getSize()) .setConnectionMinimumIdleSize(redisProperties.getPool().getMinIdle()); if (!StringUtils.isEmpty(redisProperties.getPassword())) { serverConfig.setPassword(redisProperties.getPassword()); } return Redisson.create(config); } /** * redis哨兵 */ @Bean("redisClient") @ConditionalOnProperty(name = "redis.model", havingValue = "sentinel") RedissonClient redissonClientSentinel() { log.error("redis sentinel client初始化了"); Config config = new Config(); String[] nodes = redisProperties.getSentinel().getNodes().split(","); SentinelServersConfig serversConfig = config.useSentinelServers() .addSentinelAddress(nodes) .setMasterName(redisProperties.getSentinel().getMaster()) .setReadMode(ReadMode.SLAVE) .setFailedAttempts(redisProperties.getSentinel().getFailMax()) .setTimeout(redisProperties.getTimeout()) .setMasterConnectionPoolSize(redisProperties.getPool().getSize()) .setSlaveConnectionPoolSize(redisProperties.getPool().getSize()); if (!StringUtils.isEmpty(redisProperties.getPassword())) { serversConfig.setPassword(redisProperties.getPassword()); } return Redisson.create(config); } /** * 集群 */ @Bean("redisClient") @ConditionalOnProperty(name = "redis.model", havingValue = "cluster") RedissonClient redissonClientCluster() { log.error("redis cluster client初始化了"); Config config = new Config(); RedisClusterProperties cluster = redisProperties.getCluster(); RedisPoolProperties pool = redisProperties.getPool(); String[] nodes = cluster.getNodes().split(","); ClusterServersConfig serversConfig = config.useClusterServers() .addNodeAddress(nodes) .setScanInterval(cluster.getScanInterval()) .setIdleConnectionTimeout(pool.getSoTimeout()) .setConnectTimeout(pool.getConnTimeout()) .setFailedAttempts(cluster.getFailedAttempts()) .setRetryAttempts(cluster.getRetryAttempts()) .setRetryInterval(cluster.getRetryInterval()) .setMasterConnectionPoolSize(cluster.getMasterConnectionPoolSize()) .setSlaveConnectionPoolSize(cluster.getSlaveConnectionPoolSize()) .setTimeout(redisProperties.getTimeout()); if (!StringUtils.isEmpty(redisProperties.getPassword())) { serversConfig.setPassword(redisProperties.getPassword()); } return Redisson.create(config); } /** * */ @Bean("redisClient") @ConditionalOnProperty(name = "redis.model", havingValue = "master-slave") RedissonClient redissonClientMasterSlave() { log.error("redis master-slave client初始化了"); Config config = new Config(); RedisClusterProperties cluster = redisProperties.getCluster(); RedisPoolProperties pool = redisProperties.getPool(); String[] nodes = cluster.getNodes().split(","); MasterSlaveServersConfig serversConfig = config.useMasterSlaveServers() .setMasterAddress(nodes[0]) .addSlaveAddress(nodes[1]); if (!StringUtils.isEmpty(redisProperties.getPassword())) { serversConfig.setPassword(redisProperties.getPassword()); } return Redisson.create(config); } }