2013-02-21 32 views
9

मैं एक .hgetall पूरी करने में समस्या आ रही है, यहाँ है कि मैं क्या कोशिश की है:कॉन्फ़िगर Jedis टाइमआउट

Jedis jedis = new Jedis(REDIS_MASTER_NODE); 
    jedis.connect(); 
    jedis.configSet("timeout", "30"); 

    Map<String, String> alreadyStored = jedis.hgetAll(redisTargetHash); 

और यहाँ मैं क्या मिलेगा:

Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out 
    at redis.clients.jedis.Protocol.process(Protocol.java:79) 
    at redis.clients.jedis.Protocol.read(Protocol.java:131) 
    at redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:199) 
    at redis.clients.jedis.Jedis.hgetAll(Jedis.java:851) 

ठीक है,

Jedis jedis = new Jedis(REDIS_MASTER_NODE, 6379, 1800); 

ने किया।

उत्तर

13

कि आप क्या करना Jedis कनेक्शन समयबाह्य सेट किया गया है चाहते हैं, तो आप यह है कि के लिए बने विशेष निर्माता का उपयोग कर करना चाहिए:

public Jedis(final String host, final int port, final int timeout) 

क्या आप कर रहे हैं jedis से redis सेटिंग्स पर समय-समाप्ति सेट है। CONFIG SET timeout 60 करना, इसका मतलब है कि रेडिस 60 सेकंड के बाद निष्क्रिय ग्राहक कनेक्शन बंद कर देगा। यही कारण है कि आप जेडिस में अपवाद प्राप्त करते हैं।

+4

यह कनेक्शन टाइमआउट या सॉकेट रीड टाइमआउट है। – Trying

+5

टाइमआउट की इकाई क्या है? जैसा कि, यह सेकंड या मिलीसेकंड में है? –

+0

@xetorthio क्या आप मुझे बता सकते हैं कि मैं जेडिस में क्वेरी टाइमआउट कैसे निर्दिष्ट कर सकता हूं? वर्तमान में मैं 'jedis-2.6.0.jar' का उपयोग कर रहा हूं कृपया मुझे बताएं कि उनके डिफ़ॉल्ट मूल्य क्या हैं। मेरी समझ के अनुसार 'कनेक्शनटाइमआउट 'नया कनेक्शन टाइमआउट स्थापित कर रहा है। –

5

यह xetorthio के उत्तर का एक विस्तार है, लेकिन यहां जेडिसपूल के उपयोग के लिए समान दृष्टिकोण है। (चेतावनी: इस Jedis संस्करण 2.6.2 कोड पर सीधे देखने से मेरी समझ पर आधारित है और एक जीवित उपयोग के मामले में परीक्षण नहीं किया गया।)

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); 
    jedisPoolConfig.setMaxWaitMillis(writeTimeout); 
    JedisPool pool = new JedisPool(jedisPoolConfig, redisHost, port, readTimeout); 

writeTimeout से एक Jedis संसाधन के लिए अधिकतम समय है एक लिखने के ऑपरेशन के लिए इंतजार करने के लिए पूल।

पूल कन्स्ट्रक्टर के लिए निर्दिष्ट रीडटाइमआउट सॉकेट पढ़ने के लिए प्रतीक्षा समय है, अधिक विशिष्ट विवरण के लिए java.net.Socket.setSoTimeout देखें।

+0

मेरे लिए काम किया। बहुत बहुत धन्यवाद.. –

1

कुछ बातों पर विचार करने के लिए:

  1. दोनों Jedis और JedisPool क्लासों के लिए समय समाप्ति मिलीसेकंड में है। int redis.clients.jedis.Protocol.DEFAULT_TIMEOUT = 2000 [0x7d0]

  2. प्रति this प्रलेखन के रूप में, Redis के हाल के संस्करण नहीं घनिष्ठ संबंध होता है, भले ही ग्राहक निष्क्रिय है: डिफ़ॉल्ट टाइमआउट, कम से कम 2.5.1 में, के रूप में मैं देख रहा हूँ, 2000 (मिलीसे) है। मैंने अभी तक यह सत्यापित नहीं किया है, और जब मैं करता हूं तो मैं पोस्ट को अपडेट करने का प्रयास करूंगा।