आपको वर्तमान कमांड निष्पादन के बारे में परवाह नहीं करनी चाहिए, लेकिन अन्य सभी आदेशों के प्रभाव के बारे में, क्योंकि रेडिस एक ही थ्रेड का उपयोग करके आदेशों को संसाधित करता है (यानी जब एक कमांड निष्पादित किया जा रहा है, तो अन्य सभी को एक छोर को निष्पादित करने तक प्रतीक्षा करने की आवश्यकता होती है)।
जबकि keys
या scan
आपके मामले में अकेले निष्पादित समान या समान प्रदर्शन प्रदान कर सकता है, कुछ मिलीसेकंड रेडिस को अवरुद्ध करने से समग्र I/O में काफी कमी आएगी।
keys
. का उपयोग करने का यह मुख्य कारण है विकास के उद्देश्यों के लिए और scan
उत्पादन वातावरण पर।
ओपी ने कहा:
<ब्लॉककोट>"जबकि कुंजियाँ या स्कैन आपको आपके मामले में अकेले निष्पादित समान या समान प्रदर्शन प्रदान कर सकते हैं, कुछ मिलीसेकंड Redis को अवरुद्ध करने से समग्र I/O में उल्लेखनीय कमी आएगी।" - यह वाक्य इंगित करता है कि एक कमांड रेडिस को ब्लॉक करता है, और दूसरा नहीं करता है, जो कि मामला नहीं हो सकता। अगर मुझे KEYS पर कॉल करने से 100 परिणामों की गारंटी है, तो यह स्कैन से भी बदतर है? आपको ऐसा क्यों लगता है कि एक कमांड को ब्लॉक करने की अधिक संभावना है?
जब आप खोज को पृष्ठांकित कर सकते हैं तो एक अच्छा अंतर होना चाहिए। पेजिनेशन को लागू करने और 100 कुंजियाँ, 10 से 10 (या 50 और 50) प्राप्त करने में सक्षम होने की तुलना में यह एक ही पास में 100 कुंजियाँ प्राप्त करने के लिए मजबूर नहीं है। यह बहुत छोटा रुकावट अनुप्रयोग परत द्वारा भेजे गए अन्य आदेशों को Redis द्वारा संसाधित करने दे सकता है . देखें कि रेडिस के आधिकारिक दस्तावेज इस बारे में क्या कहते हैं:
<ब्लॉककोट>चूंकि ये आदेश वृद्धिशील पुनरावृत्ति की अनुमति देते हैं, प्रति कॉल केवल तत्वों की एक छोटी संख्या लौटाते हैं, उन्हें उत्पादन में उपयोग किया जा सकता है बिना कुंजी या एसएमईबीआरएस जैसे आदेशों के नकारात्मक पक्ष के बिना जो चाबियों के बड़े संग्रह के खिलाफ बुलाए जाने पर सर्वर को लंबे समय तक (यहां तक कि कई सेकंड) अवरुद्ध कर सकते हैं। या तत्व
।