Jedis – Quand utiliser returnBrokenResource ()

Quand exactement nous devrions utiliser cette méthode. Sur JedisConnectionException, JedisDataException ou pour toute exception JedisException. À ma connaissance, il n’y a pas de bonne documentation sur les API pour Jedis.

try { Jedis jedis = JedisFactory.getInstance(); Pipeline pipe = jedis.pipelined(); Response<Set> idWithScore = pipe.zrangeWithScores(cachekey, from, to); **// some statement which may cause some other exception** Response val = pipe.get(somekey); pipe.exec(); pipe.sync(); }catch (JedisConnectionException e) { JedisFactory.returnBrokenResource(jedis); }catch(Exception e){ **// What API I should use here?, how to find whether to use returnBrokenResource(jedis) or returnResource(jedis)** }finally{ JedisFactory.returnResource(jedis); } 

Vous êtes censé utiliser returnBrokenResource lorsque l’état de l’object est irrécupérable. Un object Jedis représente une connexion à Redis. Il devient inutilisable lorsque la connexion physique est interrompue ou lorsque la synchronisation entre le client et le serveur est perdue.

Avec Jedis, ces erreurs sont représentées par l’exception JedisConnectionException. Donc, j’utiliserais returnBrokenResource pour cette exception et non les autres.

JedisDataException est davantage liée à une mauvaise utilisation de l’API Jedis ou à des erreurs Redis côté serveur.

JedisException est pour tout le rest (généralement déclenché après une erreur de niveau inférieur, indépendant de Jedis).

Pour les retardataires!

returnBrokenResource (), returnResource () sont obsolètes. Utilisez simplement jedis.close () pour bloquer en toute sécurité.

 finally { if (jedis != null) { jedis.close(); } } 

Si Jedis a été emprunté au pool, il sera renvoyé au pool avec la méthode appropriée, car il détermine déjà qu’une exception JedisConnectionException s’est déjà produite. Si Jedis n’a pas été emprunté à la piscine, il sera déconnecté et fermé.

exemple de code pour cela selon la documentation de jedis

 public Ssortingng get(Ssortingng keyName) { Jedis redis = null; try { redis = redisPool.getResource(); return redis.get(keyName); } catch (JedisConnectionException e) { if (redis != null) { redisPool.returnBrokenResource(redis); redis = null; } throw e; } finally { if (redis != null) { redisPool.returnResource(redis); } } }