JAva操作redisクラスタ接続プール

3621 ワード

redis 3.0.6クラスタは接続プールを使用し、jedis-2.8.0.jarとcommons-pool 2-2.0.jarが必要です.JedisClusterにはすべてのノードの接続プールが含まれており、JedisClusterでは単一の例を使用することを推奨します.JedisClusterは、操作が完了するたびに、接続プールの貸し出しを管理する必要がなく、内部で完了します.JedisClusterはclose()操作を実行する必要はありません.JedisPoolはすべてdestory操作を実行します.
import java.util.HashSet; import java.util.Properties; import java.util.Set; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPoolConfig; public class ClusterPoolUtil{private static JedisCluster jedisCluster;private static String redisConfigFile="redis.properties";private static String hostAndPorts=null;public static JedisClustergetJedisCluster getJedisCluster(){Properties props=new Properties();try//接続プールプロファイルprops.load(RedisPoolUtil.class.getClassr().getResourceAssStream(redisConfigFile);hostAndPorts=props.getProperty("redis. ips.ports");if(jedisCluster== null){int connectTimeOut=10000;///接続タイムアウトint soTimeOut=5000;///////読み書きタイムアウトint maxAttemts=10;///////再試行回数Set jedisClusterNode=new HashSet();JeddisPoolConfig=new JeddisPoolConfig();poolConfig=new JedisPoolConfig();poolConfig;poolConfig;poolConfig=new g.setMaxTotal(Integer.valueOf(props.getProperty(“redis.maxActive”))); poolConfig.setMaxIdle(Integer.valueOf(props.getProperty(“redis.maxIdle”))); poolConfig.setMaxWaitMillis(Long.valueOf(props.getProperty(“redis.maxWaitMillis”))); poolConfig.setTestOnBorrow(Boolean.valueOf(props.getProperty(“redis.testOnBorrow”))); poolConfig.setTestOnReturn(Boolean.valueOf(props.getProperty(“redis.testOnReturn”))); String[] hosts = hostAndPorts.split("\|\|"); for(String hostport:hosts){ String[] ipport = hostport.split("; String ip = ipport[0]; int port = Integer.parseInt(ipport[1]); jedisClusterNode.add(new HostAndPort(ip, port)); } if (jedisCluster == null) { jedisCluster = new JedisCluster(jedisClusterNode,connectTimeOut,soTimeOut,maxAttemts, poolConfig); }
        }
    }catch(Exception e){
        e.printStackTrace();
    }
    return jedisCluster;
}

public static void set(String key,String value){
    jedisCluster = getJedisCluster();
    jedisCluster.set(key, value);
}

public static String get(String key){
    jedisCluster = getJedisCluster();
    String value = jedisCluster.get(key);
    return value;
}

public static void main(String[] args) {
    set("key1", "value1");
    System.out.println(get("key1"));
}

}
redis.properties
#自分で定義したパラメータredis.ips.ports=10.0.15.191:7000||10.10.15.191:7001||10.10.15.191:7002||10.10.15.191:7003||10.10.15.191:7004||10.10.15.191:7005||10.15.191:7006||10.15.191:7007
##接続プール最大接続数、デフォルトは8.redis.maxActive=80
##接続プールにおける最大アイドル接続数redis.maxIdle=10###接続プールにおける最小アイドル接続数redis.minIdle=10#アイドル接続の検出周期(ミリ秒単位)は、デフォルト-1ではredis.timeBetweenEvenictionRunsMillis=60000#アイドル接続の検出を行わない場合、毎回のサンプリング数、デフォルト3 redis.numTestsPerEveictionRun=10
#接続プールが切れた場合、呼び出し元が待機するかどうか、このパラメータはmaxWaitMillisに対応します.このパラメータがtrueの場合にのみmaxWaitMillsが有効になります.redis.blockWhenExhausted=false#接続プールが切れた場合、呼び出し元の最大待機時間(ミリ秒単位)を選択します.デフォルトは-1です.通常、デフォルトは推奨されません.redis.maxWaitMillis=1000
##接続プールへの接続借用時に接続有効性検出(ping)を行うかどうか、無効な接続は削除されます.借出ごとに1回以上pingコマンドが実行され、デフォルトfalseとなります.redis.testOnBorrow=true##接続プールへの接続返却時に接続有効性検出(ping)を行うかどうかを選択すると、無効な接続が削除され、そのたびにpingコマンドが1回以上実行され、デフォルトfalseになります.redis.testOnReturn=true#接続プールに接続を借用するときに接続アイドル検出を行うかどうか、アイドルタイムアウトの接続が削除されます.デフォルトfalse.redis.testWhileIdle=true
##クライアントがアイドル状態になってから接続をオフにする場合、0を指定した場合、この機能をオフにすることを示します.ミリ秒単位redis.timeout=3000
#接続の最小アイドル時間.この値に達すると、空き接続はredis.minEveictableIdleTimeMills=30000から削除されます.