Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

पायथन और रेडिस:प्रबंधक/कार्यकर्ता अनुप्रयोग सर्वोत्तम अभ्यास

आपकी समस्या यह है कि आप एक रेडिस कनेक्शन के साथ एक साथ कई कमांड चलाने की कोशिश कर रहे हैं।

आप कुछ इस तरह की उम्मीद कर रहे हैं

Thread 1     Thread 2
LLEN test    
1                            
LPOP test   
command      
             LLEN test
             0

लेकिन आपको

. मिल रहा है
Thread 1     Thread 2
LLEN test    
1                            
LPOP test   
             LLEN test
             command
0

परिणाम उसी क्रम में वापस आते हैं, लेकिन किसी विशिष्ट परिणाम के लिए थ्रेड या कमांड को जोड़ने वाला कुछ भी नहीं है। व्यक्तिगत रेडिस कनेक्शन थ्रेड सुरक्षित नहीं हैं - आपको प्रत्येक कार्यकर्ता थ्रेड के लिए एक की आवश्यकता होगी।

यदि आप अनुपयुक्त तरीके से पाइपलाइनिंग का उपयोग करते हैं तो आप भी इसी तरह की समस्याएं देख सकते हैं - यह केवल परिदृश्यों को लिखने के लिए डिज़ाइन किया गया है जैसे कि एक सूची में बहुत सारे आइटम जोड़ना, जहां आप सर्वर को यह बताने की प्रतीक्षा करने के बजाय एलपीयूएसएच सफल मानते हुए प्रदर्शन में सुधार कर सकते हैं कि यह प्रत्येक के बाद सफल हुआ वस्तु। रेडिस अभी भी परिणाम लौटाएगा, लेकिन जरूरी नहीं कि वे भेजे गए अंतिम आदेश के परिणाम हों।

इसके अलावा, मूल दृष्टिकोण उचित है। हालांकि आप कुछ सुधार कर सकते हैं:

  • लंबाई की जांच करने के बजाय, केवल गैर-अवरुद्ध एलपीओपी का उपयोग करें - यदि यह शून्य हो जाता है, तो सूची खाली है
  • एक टाइमर जोड़ें ताकि अगर सूची खाली हो तो यह केवल एक और आदेश जारी करने के बजाय प्रतीक्षा करेगा।
  • जबकि लूप कंडीशन में कैंसिलेशन चेक शामिल करें
  • कनेक्शन त्रुटियों को संभालें - मैं एक बाहरी लूप सेट अप का उपयोग करता हूं ताकि यदि कनेक्शन विफल हो जाए तो कार्यकर्ता पुन:कनेक्ट करने का प्रयास करेगा (मूल रूप से मुख्य पुनरारंभ करें ) कार्यकर्ता प्रक्रिया को पूरी तरह समाप्त करने से पहले उचित संख्या में प्रयासों के लिए।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. docker:MISCONF Redis को RDB स्नैपशॉट को सहेजने के लिए कॉन्फ़िगर किया गया है

  2. Redis::CommandError:ERR क्लाइंट ने AUTH भेजा, लेकिन कोई पासवर्ड सेट नहीं किया गया

  3. Node.js, WebSockets और Redis के साथ Resque उपयोग की कल्पना कैसे करें

  4. स्क्रैपी-रेडिस प्रोग्राम अपने आप बंद नहीं होता है

  5. सिम्फनी पर रेडिस कैश उपसर्ग कुंजी सेट करें