2015-02-17 4 views
7

मैं एल्साक्टिकैच रेडिस नोड से कनेक्ट करने के लिए एक टोमकैट वेब ऐप में जेडिस का उपयोग कर रहा हूं। ऐप का उपयोग सैकड़ों उपयोगकर्ताओं द्वारा दिन के समय में किया जाता है। मुझे यकीन नहीं है कि यह सामान्य है या नहीं, लेकिन जब भी मैं मौजूदा कनेक्शन को क्लाउडवॉच मेट्रिक्स के साथ गिनता हूं, तो मुझे लगता है कि मौजूदा कनेक्शन गिरने के बिना बढ़ रहे हैं।वर्तमान कनेक्शन गिनती मेरे लोचदार दर्द में बढ़ती रहती है रेडिस नोड

यह मेरा Jedis पूल विन्यास है:

public static JedisPool getPool(){ 
     if(pool == null){ 
      JedisPoolConfig config = new JedisPoolConfig(); 
      config.setMinIdle(5); 
      config.setMaxIdle(35); 
      config.setMaxTotal(1500); 
      config.setMaxWaitMillis(3000); 
      config.setTestOnBorrow(true); 
      config.setTestWhileIdle(true); 
      pool = new JedisPool(config, PropertiesManager.getInstance().getRedisServer()); 
     } 
     return pool;  
    } 

और यह है कि कैसे मैं हमेशा redis आदेश पर अमल करने के लिए पूल कनेक्शन का उपयोग करें:

 Jedis jedis = JedisUtil.getPool().getResource(); 
     try{ 
      //Redis commands 
      } 
     catch(JedisException e){ 
      e.printStackTrace(); 
      throw e; 
     }finally{ 
      if (jedis != null) JedisUtil.getPool().returnResource(jedis); 
     } 
इस कॉन्फ़िगरेशन के साथ

, गिनती 200 से अधिक वर्तमान में है क्या मुझे ऐसा कुछ याद आ रहा है जिसे अप्रयुक्त कनेक्शन को त्यागना या मारना है? मैंने maxIdle को 35 पर सेट किया है और मुझे उम्मीद है कि यातायात बहुत कम होने पर गिनती 35 हो जाएगी लेकिन यह कभी नहीं हुआ।

उत्तर

7

हमें एक ही समस्या थी। Redis के डिफ़ॉल्ट हाल के संस्करण से अगर ग्राहक कई सेकंड के लिए निष्क्रिय है

ग्राहक के साथ कनेक्शन बंद नहीं है: - जांच के बाद थोड़ा और अधिक आगे हम भर में इस के साथ (http://redis.io/topics/clients आधिकारिक दस्तावेज redis से) आया था : कनेक्शन हमेशा के लिए खुला रहेगा।

डिफ़ॉल्ट रूप से, एडब्ल्यूएस इसलिए 0. की एक टाइमआउट मान प्रदान करता है, जो आपके redis उदाहरण के साथ initialised कर दिया गया है किसी तरह के संबंध redis द्वारा रखा जाएगा, भले ही कनेक्शन अपने ग्राहक द्वारा initialised नीचे है।

समय समाप्त 0 के विभिन्न साथ एडब्ल्यूएस में एक नया कैश पैरामीटर नीति बनाएं और फिर आप अच्छा

+0

वाह, बहुत बहुत धन्यवाद। मैं इसमें घंटों बिताएगा। मैंने अभी अपनी पहली एलिस्टी कैश इंस्टेंस की निगरानी की जांच की है और पिछले हफ्ते कनेक्शन में करीब रैखिक वृद्धि देखने के लिए चौंक गया था। मैं निश्चित रूप से सेटिंग्स को अद्यतन कर दूंगा। – Sam

0

आप JMX का उपयोग कर पूल का आकार देखने के होना चाहिए। निष्क्रिय evictor धागा सक्रिय करना एक अच्छा विचार है। आप JedisPoolConfig पर timeBetweenEvictionRunsMillis पैरामीटर सेट करके ऐसा कर सकते हैं।

आप लेन-देन (EXEC) या अवरुद्ध परिचालन (BLPOP, BRPOP) का उपयोग नहीं करते हैं, तो आप एक कनेक्शन से चिपक सकता है अगर कनेक्शन गिनती आप के लिए एक चिंता का विषय है। lettuce client एक कनेक्शन के साथ थ्रेड-सुरक्षित है

3

कैश पैरामीटर समूह में आप timeout संपादित कर सकते हैं। यह 0 पर डिफ़ॉल्ट होता है जो रेडिस में निष्क्रिय कनेक्शन छोड़ देता है। यदि आप इसे 100 पर सेट करते हैं तो यह कनेक्शन को 100 सेकंड के लिए निष्क्रिय कर देगा।

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