Redis ZSCAN

Redis Zscan



ترتیب شدہ سیٹ کے ممبروں پر اعادہ کریں۔

جیسا کہ آپ سب جانتے ہیں، Redis ترتیب شدہ سیٹ ریگولر سیٹ سے اخذ کیے گئے ہیں جہاں ہر ممبر کو اس کے سکور ویلیو کے حساب سے صعودی ترتیب میں ترتیب دیا جاتا ہے۔ اگر دو یا دو سے زیادہ ممبران ایک ہی سکور کی قدر رکھتے ہیں، تو انہیں لغت کی ترتیب سے ترتیب دیا جاتا ہے۔ عام طور پر، ZRANGE کمانڈ کا استعمال کرتے ہوئے اراکین اور اسکورز کو براہ راست بازیافت کیا جا سکتا ہے۔ جب آپ کے پاس ہزاروں ممبران کے ساتھ ایک بڑا ترتیب شدہ سیٹ ہوتا ہے، تو ZRANGE کمانڈ سرور کو لمبے عرصے تک بلاک کر سکتی ہے جیسے SMEMBERS اور KEYS کمانڈز جو کہ ایک خرابی ہے۔ لہذا، Redis ZSCAN نامی ایک خاص کمانڈ پیش کرتا ہے جو ترتیب شدہ سیٹ کے ممبروں پر تکرار کرنے کے لیے SCAN کمانڈ سے اخذ کیا گیا ہے۔ چونکہ ZSCAN کمانڈ SCAN کمانڈ سے وراثت میں ملتی ہے، اس لیے تقریباً تمام طرز عمل عام مقصد کی SCAN کمانڈ کی طرح ہیں۔







جیسا کہ دی گئی شکل میں ہے، SCAN کمانڈ کرسر پر مبنی تکرار کرنے والا ہے۔ لہذا، Redis مجموعہ کی تمام اشیاء فراہم کرنے میں ایک یا زیادہ تکرار کی ضرورت ہوتی ہے۔ چونکہ ZSCAN کمانڈ پیرنٹ SCAN کمانڈ سے وراثت میں ملتی ہے، رویہ ایک جیسا ہے۔ اس گائیڈ میں، ZSCAN کمانڈ کے نحو اور استعمال کے معاملات پر تفصیل سے بات کی جائے گی۔



ZSCAN کمانڈ

ZSCAN کمانڈ ایک کرسر پر مبنی تکرار کنندہ ہے جو 0 ویں کرسر کے ساتھ تکرار شروع کرتا ہے۔ اس کے بعد، ہر تکرار میں، یہ اگلے کرسر کے ساتھ صفر یا زیادہ ترتیب شدہ سیٹ ممبرز کو لوٹاتا ہے جسے درج ذیل کمانڈ کال کے لیے بطور کرسر استعمال کیا جانا چاہیے۔ اگر ایک یا زیادہ تکرار کے بعد لوٹا ہوا کرسر 0 ہے، تو اس کا مطلب ہے کہ سکیننگ کا عمل ختم ہو گیا ہے۔ اس مقام پر تمام ترتیب شدہ سیٹ ممبران کو واپس کر دیا جاتا ہے۔ اس عمل کو مکمل تکرار کہا جاتا ہے۔ جیسا کہ آپ دیکھ سکتے ہیں، ZSCAN کمانڈ صرف کرسر کا استعمال کرتے ہوئے اپنی حالت کو برقرار رکھتی ہے جس سے ریاست کی محدود آگاہی ہوتی ہے۔ لہذا، مندرجہ ذیل خرابیاں ZSCAN کمانڈ سے وابستہ ہیں۔



  • ایک ہی عنصر متعدد تکرار میں واپس آ سکتا ہے۔
  • اگر کوئی رکن اسکیننگ کے عمل کے آغاز میں موجود نہیں ہے تو، مکمل تکرار کے دوران اس رکن کے واپس نہ آنے کا امکان ہے۔

اس کے علاوہ، واپس آنے والے اراکین کی گنتی کی کوئی ضمانت نہیں ہے۔ بعض صورتوں میں، اگر ترتیب دیا گیا سیٹ بہت چھوٹا ہے تو، تمام اراکین کو پہلی ہی تکرار میں واپس کیا جا سکتا ہے۔ کیونکہ Redis ممبران کو ہولڈ کرنے کے لیے ایک خاص سنگل ایلوکیشن پیکڈ انکوڈنگ فارمیٹ کا استعمال کرتا ہے جب تک کہ آئٹم کی زیادہ سے زیادہ تعداد تک پہنچ نہ جائے۔ ZSCAN کمانڈ صرف کرسر واپس کرنے کے قابل ہے اگر اسکین شدہ ڈیٹا ڈھانچہ کو ہیش ٹیبل کے طور پر دکھایا گیا ہو۔





نحو:
ZSCAN کمانڈ SCAN کمانڈ کی طرح تقریباً وہی نحو استعمال کرتی ہے سوائے اس کے کہ یہ پہلی دلیل کے طور پر ترتیب شدہ سیٹ کلید کو قبول کرتی ہے۔ اجازت شدہ دلائل کے ساتھ کمانڈ کا نحو درج ذیل ہے:

ZSCAN sorted_set_key کرسر [ میچ پیٹرن ] [ COUNT اراکین_کاؤنٹ ]

sorted_set_key : ترتیب شدہ سیٹ کی کلید۔
کرسر : کرسر کی قدر 0 سے شروع ہوتی ہے اور 0 پر ختم ہوتی ہے اگر یہ مکمل تکرار ہے۔



درج ذیل دلائل اختیاری ہیں:

میچ : ہر تکرار میں عناصر کو بازیافت کرتے وقت مماثل نمونہ۔ صرف مماثل ممبران ہی واپس کیے جاتے ہیں۔
شمار : ہر تکرار میں واپس کیے جانے والے اراکین کی تخمینی تعداد۔

واپس آنے والا نتیجہ فی تکرار سیٹ میں کچھ عناصر پر مشتمل ہے۔ پہلا حصہ 64 بٹ کا غیر دستخط شدہ عدد ہے جو کرسر کی نمائندگی کرتا ہے جسے اگلی کال میں منتقل کیا جائے گا۔ اگلا حصہ اراکین اور متعلقہ اسکورز کی ایک صف ہے۔

کیس 1 کا استعمال کریں - آن لائن گیم کے تمام ممبران اور ان کے مکمل شدہ مشن کو بازیافت کریں۔

آئیے فرض کریں کہ ایک آن لائن گیم کمپنی Redis ترتیب شدہ سیٹ کا استعمال کرتے ہوئے لیڈر بورڈ کو برقرار رکھتی ہے۔ چونکہ بڑے پیمانے پر استعمال کنندگان فعال طور پر گیم کھیل رہے ہیں، اس لیے انہیں ہر کھلاڑی اور اس سے وابستہ اسکور کو بازیافت کرنے کے لیے ایک طریقہ درکار ہوتا ہے جو مکمل ہونے والے مشنوں کی تعداد ہے۔ سرور کو بلاک کیے بغیر بازیافت کرنا ضروری ہے۔ لہذا، ZSCAN کمانڈ کو مندرجہ ذیل طور پر استعمال کرنے کی تجویز ہے:

سب سے پہلے، ہم کچھ کھلاڑیوں اور مشنوں کی مکمل تعداد کے ساتھ ایک ترتیب شدہ سیٹ بناتے ہیں۔

zadd لیڈر بورڈ 12 کھلاڑی 6: جان 4 کھلاڑی 2: مریم 22 کھلاڑی 1: پٹیل پندرہ کھلاڑی: گیارہ 23 کھلاڑی 5: این 30 کھلاڑی 7: سخت 23 پلیئر 12: ایبی دو کھلاڑی 13: نکی 6 کھلاڑی 9: جیریمی۔ 7 پلیئر 45: کینا

اب، ہم ترتیب شدہ سیٹ کے ممبران پر اس طرح اعادہ کر سکتے ہیں:

zscan لیڈر بورڈ 0

آؤٹ پٹ:

کرسر کی قیمت 0 ہے جس کا مطلب ہے کہ تمام ممبران پہلے تکرار کے اختتام پر واپس آ گئے ہیں۔ اس صورت میں، کیونکہ اراکین کی تعداد کم ہے، Redis ان اراکین کی نمائندگی کرتا ہے ایک واحد مختص پیکڈ انکوڈنگ کا استعمال کرتے ہوئے۔ لہذا، جب تک زیادہ سے زیادہ پیک سائز یا ممبروں کی تعداد تک نہیں پہنچ جاتی، کمانڈ ترتیب شدہ سیٹ میں موجود تمام اراکین کو واپس کر دیتی ہے۔ اسے مکمل تکرار کہا جاتا ہے۔ کیونکہ پہلی تکرار کے اختتام پر، ہمیں تمام دس ممبران اور ان کے اسکور موصول ہوتے ہیں۔ اگر ہمارے پاس سینکڑوں اراکین ہیں، تو اسے میموری میں ہیش ٹیبل کے طور پر دکھایا جاتا ہے۔ لہذا، تمام ممبروں کو واپس کرنے میں کئی تکرار کی ضرورت ہوتی ہے۔

COUNT پیرامیٹر کو تکرار میں واپس آنے والے اراکین کی تعداد کو محدود کرنے کے لیے استعمال کیا جا سکتا ہے۔ پہلے سے طے شدہ طور پر، یہ دلیل 10 پر سیٹ ہوتی ہے۔ اگر ترتیب شدہ سیٹ سینکڑوں ممبران پر مشتمل ہو، تو اسے میموری میں ایک ہیش ٹیبل کے ذریعے دکھایا جاتا ہے۔ لہذا، واپس آنے والے اراکین کی تعداد فی تکرار دس کے لگ بھگ ہے۔ اگر ترتیب شدہ سیٹ بہت چھوٹا ہے تو COUNT دلیل کی قدر کو نظر انداز کر دیا جاتا ہے۔

کیس 2 استعمال کریں - ان کھلاڑیوں کو لائیں جن کا نام حرف 'J' سے شروع ہوتا ہے۔

ZSCAN کمانڈ کو پیٹرن میچ کی بنیاد پر واپس آنے والے اراکین کو فلٹر کرنے کے لیے استعمال کیا جا سکتا ہے۔ اس صورت میں، MATCH دلیل کو بیان کرنا ہوگا۔

آئیے پچھلے استعمال کے کیس سے ایک ہی مثال استعمال کریں۔ ضرورت یہ ہے کہ ان کھلاڑیوں کو لایا جائے جن کا نام 'J' کے حرف سے شروع ہوتا ہے۔ یہ صرف گیم سے متعلق اگلی ٹھنڈی خصوصیت کو نافذ کرنے کے لیے ہے۔ MATCH دلیل کو اس طرح بیان کیا جا سکتا ہے:

zscan لیڈر بورڈ 0 میچ * جے *

یہ مثالی طور پر دو اراکین کو واپس کرے گا جن کے نام جیریمی اور جان ہیں.

نتیجہ

خلاصہ طور پر، ZSCAN کمانڈ کا استعمال ایک Redis ترتیب شدہ سیٹ کے اراکین اور اسکور پر تکرار کرنے کے لیے کیا جاتا ہے۔ یہ کمانڈ SCAN کمانڈ کی طرح برتاؤ کرتی ہے، سوائے اس کے کہ ZSCAN کمانڈ سیٹ کلید کو پہلی دلیل کے طور پر قبول کرتی ہے۔ جیسا کہ استعمال کے معاملات میں بحث کی گئی ہے، ZSCAN کمانڈ کو MATCH اور COUNT دلائل کی وضاحت کرکے مختلف طریقوں سے استعمال کیا جا سکتا ہے جہاں آپ ممبران اور اس سے منسلک اسکورز کو بازیافت کر سکتے ہیں جو ایک مخصوص پیٹرن سے مماثل ہیں اور واپس آنے والے ممبروں کی تعداد کو فی تکرار محدود کر سکتے ہیں۔ مجموعی طور پر، ZSCAN کمانڈ مفید ثابت ہو سکتی ہے جب سرور یا کلائنٹ کو بلاک کیے بغیر ترتیب شدہ سیٹ کے اراکین کو بازیافت کیا جائے۔