रेडिस ZSCAN

Redisa Zscan



एक क्रमबद्ध सेट के सदस्यों पर पुनरावृति

जैसा कि आप सभी जानते हैं, रेडिस सॉर्ट किए गए सेट नियमित सेट से प्राप्त होते हैं, जहां प्रत्येक सदस्य को उसके स्कोर मान द्वारा आरोही क्रम में क्रमबद्ध किया जाता है। यदि दो या दो से अधिक सदस्य समान स्कोर मान रखते हैं, तो उन्हें शब्दावली क्रम द्वारा आदेश दिया जाता है। आमतौर पर, सदस्यों और स्कोर को ZRANGE कमांड का उपयोग करके सीधे प्राप्त किया जा सकता है। जब आपके पास हजारों सदस्यों के साथ एक बड़ा सॉर्ट किया गया सेट होता है, तो ZRANGE कमांड सर्वर को लंबे समय तक ब्लॉक कर सकता है जैसे SMEMBERS और KEYS कमांड जो एक खामी है। इसलिए, Redis ZSCAN नामक एक विशेष कमांड प्रदान करता है जो SCAN कमांड से एक सॉर्ट किए गए सेट के सदस्यों पर पुनरावृति करने के लिए प्राप्त होता है। चूंकि ZSCAN कमांड SCAN कमांड से विरासत में मिली है, लगभग सभी व्यवहार सामान्य उद्देश्य SCAN कमांड के समान हैं।







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



ZSCAN कमांड

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



  • एक ही तत्व कई पुनरावृत्तियों में वापस आ सकता है।
  • यदि कोई सदस्य स्कैनिंग प्रक्रिया की शुरुआत में मौजूद नहीं है, तो एक पूर्ण पुनरावृत्ति के दौरान उस सदस्य को वापस नहीं करने की संभावना है।

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





वाक्य - विन्यास:
ZSCAN कमांड लगभग SCAN कमांड के समान सिंटैक्स का उपयोग करता है सिवाय इसके कि यह पहले तर्क के रूप में एक सॉर्ट की गई सेट कुंजी को स्वीकार करता है। अनुमत तर्कों के साथ कमांड सिंटैक्स इस प्रकार है:

ZSCAN Sorted_set_key कर्सर [ मैच पैटर्न ] [ COUNT सदस्य_गणना ]

क्रमबद्ध_सेट_कुंजी : सॉर्ट किए गए सेट की कुंजी।
कर्सर : कर्सर का मान 0 से शुरू होता है और पूर्ण पुनरावृत्ति होने पर 0 पर समाप्त होता है।



निम्नलिखित तर्क वैकल्पिक हैं:

मिलान : प्रत्येक पुनरावृत्ति में तत्वों को पुनर्प्राप्त करते समय मिलान करने के लिए एक पैटर्न। केवल मेल खाने वाले सदस्यों को ही लौटाया जाता है।
गिनती करना : प्रत्येक पुनरावृत्ति में लौटाए जाने वाले सदस्यों की अनुमानित संख्या।

प्रति पुनरावृत्ति सेट लौटाए गए परिणाम में कुछ तत्व होते हैं। पहला भाग 64-बिट अहस्ताक्षरित पूर्णांक है जो कर्सर को अगली कॉल में पारित करने का प्रतिनिधित्व करता है। अगला भाग सदस्यों और संबंधित अंकों की एक सरणी है।

केस 1 का उपयोग करें - एक ऑनलाइन गेम के सभी सदस्यों और उनके पूरे किए गए मिशनों को पुनः प्राप्त करें

आइए मान लें कि एक ऑनलाइन गेम कंपनी रेडिस सॉर्ट किए गए सेट का उपयोग करके लीडरबोर्ड रखती है। चूंकि बड़े पैमाने पर उपयोगकर्ता सक्रिय रूप से खेल खेल रहे हैं, इसलिए उन्हें प्रत्येक खिलाड़ी और उनके संबद्ध स्कोर को पुनः प्राप्त करने के लिए एक तरीके की आवश्यकता होती है जो कि पूर्ण किए गए मिशनों की संख्या है। सर्वर को ब्लॉक किए बिना रिट्रीवल करना जरूरी है। तो, अनुशंसा है कि ZSCAN कमांड का उपयोग निम्नानुसार किया जाए:

सबसे पहले, हम कुछ खिलाड़ियों और मिशनों की पूरी संख्या के साथ एक क्रमबद्ध सेट बनाते हैं।

ज़ाद लीडरबोर्ड 12 खिलाड़ी6:जॉन 4 प्लेयर 2: मैरी 22 प्लेयर1:पटेल पंद्रह खिलाड़ी: ग्यारह 23 प्लेयर5: ऐनी 30 खिलाड़ी7: हर्षो 23 प्लेयर12:एबी दो प्लेयर13: निकी 6 प्लेयर9:जेरेमी 7 खिलाड़ी 45: किन

अब, हम निम्नानुसार क्रमबद्ध सेट के सदस्यों पर पुनरावृति कर सकते हैं:

ज़स्कैन लीडरबोर्ड 0

आउटपुट:

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

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

केस 2 का उपयोग करें - उन खिलाड़ियों को प्राप्त करें जिनका नाम 'J' अक्षर से शुरू होता है

ZSCAN कमांड का उपयोग पैटर्न मिलान के आधार पर लौटे सदस्यों को फ़िल्टर करने के लिए किया जा सकता है। उस स्थिति में, MATCH तर्क को निर्दिष्ट करना होगा।

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

ज़स्कैन लीडरबोर्ड 0 मिलान * जे *

यह आदर्श रूप से दो सदस्यों को लौटाना चाहिए जिनके नाम जेरेमी और जॉन हैं।

निष्कर्ष

संक्षेप में, ZSCAN कमांड का उपयोग सदस्यों और रेडिस सॉर्ट किए गए सेट के स्कोर पर पुनरावृति करने के लिए किया जाता है। यह आदेश स्कैन कमांड के समान व्यवहार करता है, सिवाय इसके कि ZSCAN कमांड सेट कुंजी को पहले तर्क के रूप में स्वीकार करता है। जैसा कि उपयोग के मामलों में चर्चा की गई है, ZSCAN कमांड का उपयोग MATCH और COUNT तर्कों को निर्दिष्ट करके अलग-अलग तरीकों से किया जा सकता है, जहां आप सदस्यों और संबंधित स्कोर को पुनः प्राप्त कर सकते हैं जो एक विशिष्ट पैटर्न से मेल खाते हैं और प्रति पुनरावृत्ति सदस्य संख्या को सीमित करते हैं। कुल मिलाकर, सर्वर या क्लाइंट को ब्लॉक किए बिना सॉर्ट किए गए सेट के सदस्यों को पुनर्प्राप्त करते समय ZSCAN कमांड उपयोगी हो सकता है।