Jedis接続Redis高同時処理で接続数が下がらない
に質問 redis接続数を表示し、処理なしで値が上位にある場合、shellコマンド
理由:使用後のJedisをリソースプールに戻すか、閉じるために、次のエラーが発生します.
解決するクエリーによると、jedisは3.0バージョン前後でリソースを解放する方法が異なり、誤った方法でリソースを閉鎖すると、リソースを閉鎖または解放することはできません.
公式解釈: jedis 3.0.0以前 jedis 3.0.0以降
変更 3.0.0以前のバージョン(今回はjedis 2.8.0を使用) 3.0.0以降
while true
do
echo " "`netstat -tun | grep 6379 | grep ESTABLISHED | awk '{print $5}' | awk -F':' '{print $1}' | sort | uniq -c`
sleep 1s
done
理由:
ERR max number of clients reached
java.net.SocketException: (Write failed) [ linux , , ]
解決する
: jedis 2.8.0 jedis.close(), , jedis.returnBrokenResource()
公式解釈:
Jedis jedis = null;
jedis = redisPool.getResource();
//
if (jedis != null)
{
redisPool.returnBrokenResource(redis);
jedis = null;
}
if (jedis != null) {
jedis.close();
jedis = null;
}
変更
Jedis jedis ;
#
JedisSentinelPool jedisSentinelPool = null;
# JedisPool
JedisPool jedisPool = null;
#
if("true".equals(es_redis_isCluster)){
jedisSentinelPool = RedisUtil.getJediSentinelPool(redis_isCluster,redis_cluster_name,redis_hostName, redis_port, redis_passWord,redis_database);
jedis = jedisSentinelPool.getResource();
jedis.select(Integer.parseInt(redis_database));
}else{
jedisPool = RedisUtil.getJedisPool(redis_isCluster,redis_cluster_name,redis_hostName, redis_port, redis_passWord,redis_database);
jedis = jedisPool.getResource();
jedis.select(Integer.parseInt(redis_database));
}
# :
if("true".equals(es_redis_isCluster ) && null != jedisSentinelPool){
jedisSentinelPool.returnBrokenResource(jedis);
}else{
if(null != jedisPool){
jedisPool.returnBrokenResource(jedis);
}
}
Jedis jedis ;
#
JedisSentinelPool jedisSentinelPool = null;
# JedisPool
JedisPool jedisPool = null;
#
if("true".equals(es_redis_isCluster)){
jedisSentinelPool = RedisUtil.getJediSentinelPool(redis_isCluster,redis_cluster_name,redis_hostName, redis_port, redis_passWord,redis_database);
jedis = jedisSentinelPool.getResource();
jedis.select(Integer.parseInt(redis_database));
}else{
jedisPool = RedisUtil.getJedisPool(redis_cluster_name,redis_hostName, redis_port, redis_passWord,redis_database);
jedis = jedisPool.getResource();
jedis.select(Integer.parseInt(redis_database));
}
if("true".equals(es_redis_isCluster ) && null != jedisSentinelPool){
jedisSentinelPool.returnBrokenResource(jedis);
}else{
if(null != jedisPool){
jedis.close();
}
}