此文由本人参考其他大神文档和资料,再结合当前环境做出的配置,有什么问题请联系我.
端口 | IP地址 |
6379 | 192.168.101.121 |
6379 |
192.168.101.199 |
6379 |
192.168.101.123 |
6379 |
192.168.101.127 |
6379 |
192.168.101.125 |
6379 |
192.168.101.126 |
// JedisCluster
@Bean
public JedisCluster JedisClusterFactory() {
LOG.info("JedisCluster创建!!");
LOG.info("redis地址:" + host + ":" + port);
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
jedisClusterNodes.add(new HostAndPort(host, port));
JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes, jedisPoolConfig);
return jedisCluster;
}
package com.unioncast.db.rdbms.core.dao.commonDBDao.impl;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.unioncast.common.util.JsonUtil;
import com.unioncast.db.rdbms.core.dao.commonDBDao.RedisDao;
import redis.clients.jedis.JedisCluster;
@Repository("redisDao")
public class RedisDaoImpl implements RedisDao {
@Autowired
JedisCluster jedisCluster;
@Override
public <T> String addByKey(String key, T object) throws IOException {
String object2JsonString = JsonUtil.object2JsonString(object);
String set = jedisCluster.set(key, object2JsonString);
return set;
}
@Override
public <T> String add(T object) throws IOException {
String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
String object2JsonString = JsonUtil.object2JsonString(object);
jedisCluster.set(uuid, object2JsonString);
return uuid;
}
@Override
public Object getObject(String key) throws IOException {
String string = jedisCluster.get(key);
Object json2Object = JsonUtil.json2Object(string, Object.class);
return json2Object;
}
@Override
public <T> List<String> addList(List<T> list) throws IOException {
List<String> sum = new ArrayList<>(70);
String uuid = null;
String str = null;
for (int i = 0; i < list.size(); i++) {
uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
str = JsonUtil.object2JsonString(list.get(i));
jedisCluster.set(uuid, str);
sum.set(i, uuid);
}
return sum;
}
@Override
public <T> String addListKey(List<String> strList, List<T> list) throws IOException {
return null;
}
@Override
public <T> Long addListKey(Map<String, T> map) throws IOException {
Long sum = (long) 0;
String str = null;
Iterator<Entry<String, T>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, T> entry = (Entry<String, T>) iterator.next();
String key = entry.getKey();
T object = entry.getValue();
str = JsonUtil.object2JsonString(object);
jedisCluster.set(key, str);
sum = sum + 1;
}
return sum;
}
@Override
public Long deleteByKey(String key) throws IOException {
Long del = jedisCluster.del(key);
return del;
}
@Override
public Long batchDelete(List<String> strList) throws IOException {
Long sum = (long) 0;
Long del = (long) 0;
for (int i = 0; i < strList.size(); i++) {
del = jedisCluster.del(strList.get(i));
sum = sum + del;
}
return sum;
}
}
package com.unioncast.db.config;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
@PropertySource(value = "classpath:/redis.properties")
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
// @Value("${spring.redis.host}")
// private String host;
// @Value("${spring.redis.port}")
// private int port;
// @Value("${spring.redis.timeout}")
// private int timeout;
private static final Logger LOG = LogManager.getLogger(RedisConfig.class);
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.pool.max-wait}")
private long maxWaitMillis;
/*
* @Value("${spring.redis.password}") private String password;
*/
// Jedis连接池
@Bean
public JedisPool redisPoolFactory() {
LOG.info("JedisPool注入成功!!");
LOG.info("redis地址:" + host + ":" + port);
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
// JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port,
// timeout, password);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
return jedisPool;
}
// JedisCluster
@Bean
public JedisCluster JedisClusterFactory() {
LOG.info("JedisCluster创建!!");
LOG.info("redis地址:" + host + ":" + port);
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
jedisClusterNodes.add(new HostAndPort(host, port));
JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes, jedisPoolConfig);
return jedisCluster;
}
@Bean
public KeyGenerator wiselyKeyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
@Bean
public JedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setHostName(host);
factory.setPort(port);
factory.setTimeout(timeout); // 设置连接超时时间
return factory;
}
@Bean
public CacheManager cacheManager(RedisTemplate, ?> redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
// Number of seconds before expiration. Defaults to unlimited (0)
cacheManager.setDefaultExpiration(10); // 设置key-value超时时间
return cacheManager;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
setSerializer(template); // 设置序列化工具,这样ReportBean不需要实现Serializable接口
template.afterPropertiesSet();
return template;
}
private void setSerializer(StringRedisTemplate template) {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
}
}