2011-05-10 10 views
19

मुझे उत्सुकता है कि रेडिस (या उस मामले के लिए कोई भी डीबी) पूछताछ करने की अनुशंसित विधि टोरनाडो से है।टोरनाडो से आप * सही * क्वेरी रेडिस कैसे करते हैं?

मैंने कुछ उदाहरण देखे हैं जैसे https://gist.github.com/357306 लेकिन वे सभी रेडिस को अवरुद्ध कॉल का उपयोग कर रहे हैं।

मेरी समझ यह है कि टॉरनाडो को रोकने के लिए पीसने से बचने के लिए, मुझे ट्विस्टेड के लिए विकसित गैर-अवरुद्ध डीबी पुस्तकालयों का उपयोग करने की आवश्यकता है।

क्या मैं गलत हूँ? यह कैसे किया जाना चाहिए?

उत्तर

39

जब बीएलपीओपी जैसे आदेशों को अवरुद्ध करने या पब/सब चैनल सुनने की बात आती है तो आपको tornado-redis जैसे एसिंक्रोनस क्लाइंट की आवश्यकता होगी। आप this demo से शुरू कर सकते हैं यह देखने के लिए कि tornado-redis क्लाइंट का उपयोग सरल सार्वजनिक चैट एप्लिकेशन को विकसित करने के लिए किया जा सकता है।

लेकिन मैं अन्य मामलों के लिए hiredis के साथ सिंक्रोनस redis-py क्लाइंट का उपयोग करने की अनुशंसा करता हूं।

एसिंक्रोनस क्लाइंट का मुख्य लाभ यह है कि आपका सर्वर रेडिस सर्वर प्रतिक्रिया की प्रतीक्षा करते समय आने वाले अनुरोधों को संभाल सकता है। हालांकि, रेडिस सर्वर इतना तेज़ है कि ज्यादातर मामलों में आपके टोरनाडो एप्लिकेशन में एसिंक्रोनस कॉलबैक स्थापित करने का ओवरहेड अनुरोध प्रक्रिया के कुल समय में और फिर Redis सर्वर प्रतिक्रिया की प्रतीक्षा में बिताए गए समय को जोड़ता है।

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

एक अतुल्यकालिक ग्राहक कुछ लाभ जब आप कई Redis सर्वर उदाहरणों का उपयोग किया है, लेकिन मैं एक तुल्यकालिक (redis-py) ग्राहक और twemproxy या this one (उत्तरार्द्ध का समर्थन करता है पाइपलाइनिंग और mget/MSET आदेश) की तरह एक प्रॉक्सी का उपयोग सुझाव देते हैं।

इसके अलावा मैं सुझाव देता हूं कि टोरनाडो अनुप्रयोगों में रेडिस-पीई क्लाइंट का उपयोग करते समय कनेक्शन पूलिंग का उपयोग न करें। प्रत्येक एप्लिकेशन को कनेक्ट करने वाले प्रत्येक Redis डेटाबेस के लिए बस एक Redis ऑब्जेक्ट उदाहरण बनाएं।

+2

दरअसल, एक सिंक्रोनस क्लाइंट का उपयोग औसत मामले के लिए ठीक लगता है, लेकिन सबसे खराब मामला स्वीकार्य नहीं हो सकता है!उदाहरण 1: यदि रेडिस लटकती है या रेडिस पर नेटवर्क धीमा है, तो आप अपने टोरनाडो ऐप को लटका देंगे। उदाहरण 2: क्लाइंट पर serializing अनुरोध और सर्वर पर serializing केवल तभी समकक्ष है जब नेटवर्क विलंबता 0 है, जो लगभग कभी मामला नहीं है। –

+0

टॉरनाडो-रेडिस अब और बनाए रखा नहीं है। लेकिन भंडार कुछ विकल्पों का सुझाव देता है: https://github.com/aio-libs/aioredis और https://github.com/mrjoes/toredis – matyas

1

एक विकल्प port of Tornado to Twisted का उपयोग करना है और उसके बाद the Twisted Redis API का उपयोग करना है। टॉरनाडो में मनमाने ढंग से एसिंक्रोनस ऑपरेशंस को एक उद्देश्य के रूप में प्रतीत नहीं होता है (हालांकि यदि आप ट्विस्ट के लिए बनाए गए सभी प्रकार की चीजों का पुनर्निर्माण करना चाहते हैं, तो शायद आप the low-level iostream APIs in Tornado से बना सकते हैं, लेकिन I wouldn't recommend it)।

+0

या टॉरनाडो के शीर्ष पर ट्विस्ट रिएक्टर कार्यान्वयन: http://tornado.readthedocs.org/en/latest/twisted.html –

8

मैं brukva का उपयोग करने की अनुशंसा करता हूं जो एक "असिंक्रोनस रेडिस क्लाइंट है जो टोरनाडो आईओ लूप के भीतर काम करता है"।

+11

बस अगर कोई इस पोस्ट में ठोकर खाता है, तो मुझे लगता है कि सबसे अद्यतित एसिंक रेडिस लाइब्रेरी अब tornadoredis है https://github.com/leporo/tornado-redis –

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

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