2013-06-13 4 views
10

जब हमें इस विधि का उपयोग करना चाहिए। जेडिसकनेक्शन अपवाद, जेडीसडेटाएक्सप्शन या किसी जेडीसएक्सप्शन के लिए। जेडिस के लिए मेरे ज्ञान के लिए कोई अच्छा एपीआई दस्तावेज नहीं है।जेडिस - रिटर्न ब्रोकन रिसोर्स का उपयोग कब करें()

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); 
} 

उत्तर

9

आपको ऑब्जेक्ट की स्थिति अप्राप्य होने पर रिटर्न ब्रोकन रिसोर्स का उपयोग करना होगा। एक जेडिस ऑब्जेक्ट रेडिस के साथ एक कनेक्शन का प्रतिनिधित्व करता है। भौतिक कनेक्शन टूटा हुआ है, या जब क्लाइंट और सर्वर के बीच सिंक्रनाइज़ेशन खो जाता है तो यह अनुपयोगी हो जाता है।

जेडिस के साथ, इन त्रुटियों को जेडिसकनेक्शन अपवाद द्वारा दर्शाया जाता है। इसलिए मैं इस अपवाद के लिए रिटर्न ब्रोकन रिसोर्स का उपयोग करूंगा, न कि अन्य।

जेडिसडाटाएक्सप्शन जेडिस एपीआई के खराब उपयोग से संबंधित है, या सर्वर-पक्ष रेडिस त्रुटियों से अधिक है।

जेडिसएक्सप्शन अन्य सभी चीज़ों के लिए है (आमतौर पर जेडिस से स्वतंत्र, निम्न स्तर की त्रुटि के बाद उठाया जाता है)। प्रति jedis प्रलेखन

public String get(String 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); 
     } 
    } 
} 
+0

क्या एपीआई बेहतर समझने के लिए जेडिस के लिए कोई एपीआई दस्तावेज है। – user1182253

+0

नहीं - आम तौर पर, मैं https://github.com/xetorthio/jedis/tree/master/src/test/java/redis/clients/jedis/tests में प्रदान किए गए उदाहरणों का उपयोग करता हूं - जब मैं अटक जाता हूं तो मैं देखता हूं सोर्स कोड। –

+6

आइए कहें कि मैं जेडिसकनेक्शन अपवाद और रिटर्न ब्रोकन रिसोर्स को पकड़ता हूं। क्या मुझे अभी भी रिटर्न संसाधन को अवरुद्ध करना चाहिए? क्या यह दो बार संसाधन लौटने में कोई परेशानी पैदा करेगा? –

1

नमूना कोड!

वापसी ब्रोकन संसाधन(), वापसी संसाधन() बहिष्कृत हैं। अंततः सुरक्षित रूप से ब्लॉक में jedis.close() का उपयोग करें।

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

तो Jedis पूल से उधार लिया गया था, यह बाद से यह पहले से ही निर्धारित करता है JedisConnectionException हुआ था उचित विधि के साथ पूल करने के लिए लौटा दी जाएगी। यदि जेडीस को पूल से उधार नहीं लिया गया था, तो यह डिस्कनेक्ट हो जाएगा और बंद हो जाएगा।

7

देर से आने वालों के लिए के रूप में इस के लिए

संबंधित मुद्दे