私はjedisを使ってredis serverに接続しています。 RedisのIP値は、別のファイルに設定されていると私はJedisPoolからリソースを取得中にスレッドが待機状態になっていました
private static JedisPool pool;
public static void initRedisClient() throws Exception {
String redisConfigPath = "/conf/redis.properties";
Properties docsRedisProp = RedisUtils.loadProperties(redisConfigPath);
pool = new JedisPool(docsRedisProp.getProperty("redisserver"));
}
}
そしてRedisのから複数のキーを取得するために私mget
方法初期化時にファイルをロードしようとしている
public static List<String> mgetDataFromRedisCache(String[] keys) throws CacheException {
Jedis jedisCon = null;
try {
jedisCon = getJedis();
jedisCon.select(1);
return jedisCon.mget(keys);
} catch (Exception e) {
LOGGER.warning("Exception while fetching data from Redis Client. EXCEPTION=" + e.getMessage());
e.printStackTrace();
} finally {
if (jedisCon != null) {
returnJedis(jedisCon);
}
}
return null;
}
を次のように私が持っているときですプロパティファイルに不正なIP値が与えられている - それにアクセスするリクエストスレッドは、長時間待っています。プール内のリソースが利用できないため、私のリクエストがストールしてはならない。ここで
私はストールしたスレッドのスレッドダンプを装着しています(つまり、待ち状態にあったスレッドは)
###_http-nio-8443-exec-140" #104908 daemon prio=5 os_prio=0 tid=0x00007f247805f000 nid=0x4266 waiting on condition [0x00007f220a4df000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000006fe438408> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at org.apache.commons.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:524)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:438)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361)
at redis.clients.util.Pool.getResource(Pool.java:40)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:84)
at com.retail.store.RedisClient.getJedis(RedisClient.java:53)
at com.retail.store.RedisClient.mgetDataFromRedisCache(RedisClient.java:82)
どのように私はこれを達成できますか?どんな助けでも大歓迎です。ありがとうございます:-)
行くのスレッドがこのトピックには何もあなたを見つけるでし避けることができますか? redisをspring-data-redis(クライアントとしてJedisも使用)と同じ問題に遭遇しています。 – woezelmann
@woezelmann setting 'setMaxWaitMillis'が私を助けました。私の答えで私を説明した..それを見てください。それが役に立てば幸い !! – Natasha