单体模式
1、https://www.cnblogs.com/qlqwjy/p/8562703.html
2、https://www.cnblogs.com/qlqwjy/p/8574121.html
1、JedisClusterConfig
@Configuration
public class JedisClusterConfig {
@Autowired
private RedisProperties redisProperties;
@Autowired
private GenericObjectPoolConfig poolConfig;
@Bean
@ConfigurationProperties(prefix = "redis.poolConfig")
public GenericObjectPoolConfig getRedisConfig() {
GenericObjectPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(1000);
return poolConfig;
}
/**
* 注意: 这里返回的JedisCluster是单例的,并且可以直接注入到其他类中去使用
*
* @return
*/
@Bean
public JedisCluster getJedisCluster() {
// 获取服务器数组(这里要相信自己的输入,所以没有考虑空指针问题)
String[] serverArray = redisProperties.getJedisClusterNode().split(",");
Set<HostAndPort> nodes = new HashSet<HostAndPort>();
for (String ipPort : serverArray) {
String[] ipPortPair = ipPort.split(":");
nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer
.valueOf(ipPortPair[1].trim())));
}
System.out.println(poolConfig.getMaxIdle());
if (StringUtils.isEmpty(redisProperties.getPassword())) {
return new JedisCluster(nodes, redisProperties.getConnectionTimeout(),
redisProperties.getSoTimeout(), redisProperties.getMaxAttempts(), poolConfig);
} else {
return new JedisCluster(nodes, redisProperties.getConnectionTimeout(),
redisProperties.getSoTimeout(), redisProperties.getMaxAttempts(),
redisProperties.getPassword(), poolConfig);
}
}
@Bean
public RedisClusterConfiguration getRedisCluster() {
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
Set<RedisNode> jedisClusterNodes = new HashSet<RedisNode>();
String[] add = redisProperties.getJedisClusterNode().split(",");
for (String temp : add) {
String[] hostAndPort = StringUtils.split(temp, ":");
jedisClusterNodes.add(new RedisNode(hostAndPort[0], Integer.parseInt(hostAndPort[1])));
}
redisClusterConfiguration.setClusterNodes(jedisClusterNodes);
return redisClusterConfiguration;
}
@Bean
public JedisConnectionFactory redisConnectionFactory(RedisClusterConfiguration redisClusterConfiguration, GenericObjectPoolConfig jedisPoolConfig) {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration, (JedisPoolConfig) jedisPoolConfig);
//jedisConnectionFactory.setPassword("");
return jedisConnectionFactory;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
StringRedisTemplate redisTemplate = new StringRedisTemplate();
redisTemplate.setConnectionFactory(cf);
//序列化配置
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean
public RedisCacheManager getRedisCacheManager(RedisTemplate redisTemplate) {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);
redisCacheManager.setDefaultExpiration(600L);
return redisCacheManager;
}
}
2、JedisClusterConfig
@EnableCaching
@Configuration
public class RedisCacheConfig extends CachingConfigurerSupport {
private volatile JedisConnectionFactory jedisConnectionFactory;
private volatile RedisTemplate<String, String> redisTemplate;
private volatile RedisCacheManager redisCacheManager;
public RedisCacheConfig() {
super();
}
/**
* 带参数的构造方法 初始化所有的成员变量
*
* @param jedisConnectionFactory
* @param redisTemplate
* @param redisCacheManager
*/
public RedisCacheConfig(JedisConnectionFactory jedisConnectionFactory,
RedisTemplate<String, String> redisTemplate,
RedisCacheManager redisCacheManager) {
this.jedisConnectionFactory = jedisConnectionFactory;
this.redisTemplate = redisTemplate;
this.redisCacheManager = redisCacheManager;
}
public JedisConnectionFactory getJedisConnecionFactory() {
return jedisConnectionFactory;
}
public RedisTemplate<String, String> getRedisTemplate() {
return redisTemplate;
}
public RedisCacheManager getRedisCacheManager() {
return redisCacheManager;
}
@Bean
@Override
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object o, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName());
sb.append(".");
sb.append(method.getName());
sb.append(".");
for (Object param : params) {
sb.append(param.toString());
}
return sb.toString();
}
};
}
}
Spring Cache + JedisCluster(集群模式)
原文:https://www.cnblogs.com/frontlook/p/11494632.html