11
votes

Jedis - quand utiliser returnbrokenResource ()

Quand nous devrions utiliser exactement cette méthode. Sur JedisconnectionException, JeDisdataException ou pour toute erreur de JedisException. Il n'y a pas de bonne documentation API pour Jedis à ma connaissance.

try {
    Jedis jedis = JedisFactory.getInstance();
    Pipeline pipe = jedis.pipelined();
    Response<Set<Tuple>> idWithScore = pipe.zrangeWithScores(cachekey, from, to);
    **// some statement which may cause some other exception**
    Response<String> 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);
}


0 commentaires

3 Réponses :


10
votes

Vous êtes censé utiliser RethRokeResource lorsque l'état de l'objet n'est pas recouvréable. Un objet Jedis représente une connexion à Redis. Il devient inutilisable lorsque la connexion physique est cassée ou lorsque la synchronisation entre le client et le serveur est perdue.

avec Jedis, ces erreurs sont représentées par la DisconnectionException. Donc, j'utiliserais returnbrokenResource pour cette exception et non les autres.

JedisdataException est plus lié à une mauvaise utilisation de l'API Jedis ou aux erreurs de Redis côté serveur.

Jedisexception est pour tout le reste (généralement soulevé après une erreur de niveau inférieur, indépendante de Jedis).


4 commentaires

Existe-t-il une documentation API pour Jedis, pour mieux comprendre les API.


Non - Généralement, j'utilise les exemples fournis dans GitHub.com/xeTorthio/jedis/tree/master/src/test/java/redis/... - Quand je suis bloqué, je regarde dans le code source.


Disons que je attrape JedisconnectionException et retourbreRokeResource. Devrais-je toujours bloquer finalement retournetsource? Cela causera-t-il une difficulté à renvoyer une ressource deux fois?


La piscine Jedis est mise en œuvre avec Apache Common GenericObjectPool. Les objets ne doivent pas être retournés à la piscine deux fois. Voir COMMONS.APACHE.ORG/PROPER/COMMONS-POOL/API-1.6/ORG/APACHE/...



1
votes

échantillon de code pour cela selon la documentation de Jedis xxx


0 commentaires

11
votes

pour les latécomères!

returnbreRokeResource (), retourresource () sont obsolètes. Il suffit d'utiliser jedis.close () dans le bloc enfin en toute sécurité. xxx

Si les Jedis ont été empruntés à la piscine, il sera retourné à la piscine avec une méthode appropriée car elle détermine déjà qu'il y avait déjà eu la jedisconnectionException. Si Jedis n'était pas emprunté à la piscine, il sera déconnecté et fermé.


1 commentaires

Où avez-vous trouvé la documentation pour cela?