Ich benutze Jedis, um mit Redis-Server zu verbinden. Redis ip-Wert wird in einer separaten Datei konfiguriert und ich versuche, die Datei während der InitialisierungThreads waren im Wartezustand, während eine Ressource von 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"));
}
}
Und meine mget
Methode zu laden mehrere Schlüssel zu holen von redis sind wie folgt
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;
}
Wenn ich In der Eigenschaftendatei wurde ein falscher IP-Wert angegeben - der auf ihn zugreifende Anfrage-Thread wartet für längere Zeit. Meine Anfrage sollte aufgrund der Nichtverfügbarkeit der Ressource im Pool nicht blockiert werden.
Hier bin ich Anbringen der Thread-Dump blockierter Threads (dh, Threads, die in Wartezustand waren)
###_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)
Wie konnte ich das erreichen? Jede Hilfe wird sehr geschätzt. Vielen Dank im Voraus :-)
Haben Sie etwas zu diesem Thema erfahren? Wir haben das gleiche Problem, wenn wir redis mit spring-data-redisis verwenden (aber auch Jedis als Client) – woezelmann
@woezelmann setting 'setMaxWaitMillis' hat mir geholfen. Habe mir das in meiner Antwort erklärt. Bitte schauen Sie hinein. ich hoffe es hilft !! – Natasha