一、RedisDao定义。
package com.cloudwise.redis;
/**
* 暂时定义几个 后续再扩展
* <p>Title: RedisDao</p>
* <p>Description: </p>
* @author back
* @date 2019年9月19日
*/
public interface RedisDao {
boolean isExist(String key);
String set(String key,String value);
String get(String key);
String setex(String key,String value,int seconds);
long delete(String key);
long incr(String key);
}
二、相关实现。只是向默认db中写
package com.cloudwise.redis;
import java.util.Arrays;
import java.util.Set;
import com.google.common.collect.Sets;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
/**
*
* <p>Title: RedisDaoImpl</p>
* <p>Description: </p>
* @author back
* @date 2019年9月19日
*/
public class RedisDaoImpl implements RedisDao{
private JedisCluster jedisCluster;
/**
*
* @param hosts 127.0.0.1:6379,127.0.0.1:8001,127.0.0.1:8002
*/
public RedisDaoImpl(String hosts){
Set<HostAndPort> nodes = transferHostAndPorts(hosts);
JedisPoolConfig config = getConfig();
jedisCluster = new JedisCluster(nodes, config);
}
private Set<HostAndPort> transferHostAndPorts(String hosts){
Set<HostAndPort> set = Sets.newHashSet();
Arrays.asList(hosts.split(",")).forEach(host1 -> {
String[] meta = host1.trim().split(":");
HostAndPort hostAndPort = new HostAndPort(meta[0].trim(),Integer.parseInt(meta[1].trim()));
set.add(hostAndPort);
});
return set;
}
private JedisPoolConfig getConfig(){
JedisPoolConfig config = new JedisPoolConfig();
//最大连接数
config.setMaxTotal(30);
//最大空闲连接数
config.setMaxIdle(10);
//每次释放连接的最大数目
config.setNumTestsPerEvictionRun(1024);
// 释放连接的扫描间隔(毫秒)
config.setTimeBetweenEvictionRunsMillis(30000);
//连接最小空闲时间
config.setMinEvictableIdleTimeMillis(1800000);
//连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放
config.setSoftMinEvictableIdleTimeMillis(10000);
//获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1
config.setMaxWaitMillis(1500);
//在获取连接的时候检查有效性, 默认false
config.setTestOnBorrow(true);
//在空闲时检查有效性, 默认false
config.setTestWhileIdle(true);
//连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
config.setBlockWhenExhausted(false);
return config;
}
@Override
public boolean isExist(String key) {
return jedisCluster.exists(key);
}
@Override
public String set(String key, String value) {
return jedisCluster.set(key, value);
}
@Override
public String get(String key) {
return jedisCluster.get(key);
}
@Override
public String setex(String key, String value, int seconds) {
return jedisCluster.setex(key, seconds, value);
}
@Override
public long delete(String key) {
return jedisCluster.del(key);
}
@Override
public long incr(String key) {
return jedisCluster.incr(key);
}
}