packagecom.test.utils.redis;importlombok.extern.log4j.Log4j2;importredis.clients.jedis.Jedis;importredis.clients.jedis.JedisPool;importredis.clients.jedis.JedisPoolConfig;importredis.clients.jedis.Pipeline;importcom.test.utils.redis.items.KvItem;importjava.io.IOException;importjava.util.List;
@Log4j2public classRedisUtils {private finalJedisPool jedisPool;private intdbIndex;/*Redis辅助插入类。
**/
public RedisUtils(String host, int post, int timeout, String password, boolean ssl, int maxTotal, int maxIdel, intdbIndex) {this.dbIndex =dbIndex;
JedisPoolConfig config= newJedisPoolConfig();
config.setTestOnBorrow(true);
config.setMaxWaitMillis(120000);
config.setMaxIdle(maxIdel);
config.setMaxTotal(maxTotal);
jedisPool= newJedisPool(config, host, post, timeout, password, ssl);
}public booleancheckConnection() {try{
Jedis jedis=jedisPool.getResource();if (jedis != null) {
jedis.close();return true;
}
}catch(Exception ignored) {
log.warn("[checkConnection] check redis connection failed. ", ignored);
}return false;
}private synchronized Jedis getJedis(intmaxRetry) {
Jedis jedis= null;
Exception lastEx= new Exception("no error.");for (int i = 0; i < maxRetry; i++) {if (jedisPool == null) break;try{
jedis=jedisPool.getResource();if (jedis == null) {
Thread.sleep(1000);
}else{
jedis.select(dbIndex);//临时使用
break;
}
}catch(Exception e) {
jedis= null;
lastEx=e;
}
}if (jedis == null) {
log.error("[get a jedis] get a jedis from pools failed, has been retry [" + maxRetry + "] times. please check connection. ", lastEx);
}returnjedis;
}public synchronized boolean add(Listitem) {if (item == null || item.isEmpty()) return true;try{
Jedis jedis= getJedis(300);if (jedis == null) {
log.error("[add to redis] add to [" + item.size() + "] items to redis, but get a jedis failed. please check");return false;
}
Pipeline p=jedis.pipelined();for(KvItem kv : item) {
p.set(kv.getKey(), kv.getValue());
}
p.sync();try{
p.close();
}catch(IOException e) {
log.warn("[add to redis] close jedis Pipeline failed.", e);
}
jedis.close();return true;
}catch(Exception ex) {
log.warn("[add to redis] occur a error.", ex);return false;
}
}
}