Redis ZSCAN

Redis Zscan



একটি সাজানো সেট সদস্যদের উপর পুনরাবৃত্তি করুন

আপনি সকলেই জানেন, রেডিস সাজানো সেটগুলি নিয়মিত সেটগুলি থেকে উদ্ভূত হয় যেখানে প্রতিটি সদস্যকে তার স্কোর মান দিয়ে ক্রমবর্ধমান ক্রমে অর্ডার করা হয়। যদি দুই বা ততোধিক সদস্য একই স্কোর মান ধারণ করেন, তবে তাদের অভিধানিক ক্রম অনুসারে আদেশ করা হয়। সাধারণত, ZRANGE কমান্ড ব্যবহার করে সদস্য এবং স্কোর সরাসরি পুনরুদ্ধার করা যেতে পারে। যখন আপনার হাজার হাজার সদস্যের সাথে একটি বড় সাজানো সেট থাকে, তখন ZRANGE কমান্ড SMEMBERS এবং KEYS কমান্ডের মতো সার্ভারকে দীর্ঘ সময়ের জন্য ব্লক করতে পারে যা একটি ত্রুটি। সুতরাং, রেডিস ZSCAN নামে একটি বিশেষ কমান্ড অফার করে যা একটি সাজানো সেটের সদস্যদের উপর পুনরাবৃত্তি করার জন্য SCAN কমান্ড থেকে প্রাপ্ত। যেহেতু ZSCAN কমান্ডটি SCAN কমান্ড থেকে উত্তরাধিকারসূত্রে প্রাপ্ত, প্রায় সমস্ত আচরণই সাধারণ উদ্দেশ্য SCAN কমান্ডের মতোই।







প্রদত্ত চিত্রের মতো, SCAN কমান্ডটি একটি কার্সার-ভিত্তিক পুনরাবৃত্তিকারী। সুতরাং, একটি রেডিস সংগ্রহের সমস্ত আইটেম সরবরাহ করতে এক বা একাধিক পুনরাবৃত্তি লাগে। যেহেতু ZSCAN কমান্ড প্যারেন্ট SCAN কমান্ড থেকে উত্তরাধিকারসূত্রে প্রাপ্ত, আচরণ একই। এই নির্দেশিকায়, ZSCAN কমান্ডের সিনট্যাক্স এবং ব্যবহারের ক্ষেত্রে বিস্তারিত আলোচনা করা হবে।



ZSCAN কমান্ড

ZSCAN কমান্ড হল একটি কার্সার-ভিত্তিক পুনরাবৃত্তিকারী যা 0 তম কার্সার দিয়ে পুনরাবৃত্তি শুরু করে। পরবর্তীতে, প্রতিটি পুনরাবৃত্তিতে, এটি পরবর্তী কার্সারের সাথে শূন্য বা তার বেশি সাজানো সেট সদস্যদের প্রদান করে যা নিম্নলিখিত কমান্ড কলের জন্য কার্সার হিসাবে ব্যবহার করা উচিত। যদি এক বা একাধিক পুনরাবৃত্তির পরে ফিরে আসা কার্সারটি 0 হয়, তাহলে এর মানে হল স্ক্যানিং প্রক্রিয়া শেষ। সমস্ত সাজানো সেট সদস্যদের এই সময়ে ফেরত দেওয়া হয়। এই প্রক্রিয়াটিকে পূর্ণ পুনরাবৃত্তি বলা হয়। আপনি দেখতে পাচ্ছেন, ZSCAN কমান্ড শুধুমাত্র একটি কার্সার ব্যবহার করে তার অবস্থা রাখে যা একটি সীমিত রাষ্ট্র সচেতনতার দিকে পরিচালিত করে। অতএব, নিম্নলিখিত ত্রুটিগুলি ZSCAN কমান্ডের সাথে যুক্ত।



  • একই উপাদান একাধিক পুনরাবৃত্তিতে ফিরে আসতে পারে।
  • স্ক্যানিং প্রক্রিয়ার শুরুতে একজন সদস্য উপস্থিত না থাকলে, সম্পূর্ণ পুনরাবৃত্তির সময় সেই সদস্যকে ফেরত না দেওয়ার সম্ভাবনা রয়েছে।

এছাড়াও, ফিরে আসা সদস্যদের গণনার কোনও গ্যারান্টি নেই। কিছু ক্ষেত্রে, যদি সাজানো সেটটি খুব ছোট হয়, তবে সমস্ত সদস্যকে প্রথম পুনরাবৃত্তিতে ফেরত দেওয়া হতে পারে। কারণ রেডিস সদস্যদের ধরে রাখার জন্য একটি বিশেষ একক বরাদ্দ প্যাকড এনকোডিং বিন্যাস ব্যবহার করে যতক্ষণ না একটি সর্বাধিক আইটেম সংখ্যা পৌঁছায়। ZSCAN কমান্ড শুধুমাত্র একটি কার্সার ফেরত দিতে সক্ষম যদি স্ক্যান করা ডেটা স্ট্রাকচারটি হ্যাশ টেবিল হিসাবে উপস্থাপন করা হয়।





বাক্য গঠন:
ZSCAN কমান্ডটি SCAN কমান্ডের মতো প্রায় একই সিনট্যাক্স ব্যবহার করে তবে এটি প্রথম আর্গুমেন্ট হিসাবে একটি সাজানো সেট কী গ্রহণ করে। অনুমোদিত আর্গুমেন্ট সহ কমান্ড সিনট্যাক্স নিম্নরূপ:

ZSCAN sorted_set_key কার্সার [ ম্যাচ প্যাটার্ন ] [ COUNTটি সদস্য_গণনা ]

সাজানো_সেট_কী : সাজানো সেটের কী।
কার্সার : কার্সার মান 0 থেকে শুরু হয় এবং 0 এ শেষ হয় যদি এটি একটি সম্পূর্ণ পুনরাবৃত্তি হয়।



নিম্নলিখিত আর্গুমেন্ট ঐচ্ছিক:

ম্যাচ : প্রতিটি পুনরাবৃত্তির উপাদানগুলি পুনরুদ্ধার করার সময় মেলে একটি প্যাটার্ন৷ শুধুমাত্র মিলে যাওয়া সদস্যদের ফিরিয়ে দেওয়া হয়।
COUNT : প্রতিটি পুনরাবৃত্তিতে সদস্যদের আনুমানিক সংখ্যা ফেরত দিতে হবে।

প্রতি পুনরাবৃত্তির সেটে ফিরে আসা ফলাফলে কয়েকটি উপাদান রয়েছে। প্রথম অংশটি একটি 64-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা যা পরবর্তী কলে পাস করা কার্সারকে প্রতিনিধিত্ব করে। পরবর্তী অংশটি সদস্য এবং সংশ্লিষ্ট স্কোরগুলির একটি অ্যারে।

কেস 1 ব্যবহার করুন - একটি অনলাইন গেমের সমস্ত সদস্য এবং তাদের সম্পূর্ণ মিশন পুনরুদ্ধার করুন

ধরা যাক যে একটি অনলাইন গেম কোম্পানি রেডিস সাজানো সেট ব্যবহার করে একটি লিডারবোর্ড বজায় রাখে। যেহেতু ব্যাপক ব্যবহারকারীরা সক্রিয়ভাবে গেমটি খেলছেন, তাই তাদের প্রতিটি খেলোয়াড় এবং তাদের সংশ্লিষ্ট স্কোর পুনরুদ্ধার করার একটি উপায় প্রয়োজন যা সম্পূর্ণ মিশনের সংখ্যা। সার্ভার ব্লক না করে পুনরুদ্ধার করা আবশ্যক। সুতরাং, সুপারিশ হল ZSCAN কমান্ডটি নিম্নরূপ ব্যবহার করা:

প্রথমত, আমরা কিছু প্লেয়ার এবং মিশনের সম্পূর্ণ সংখ্যা সহ একটি সাজানো সেট তৈরি করি।

zadd লিডারবোর্ড 12 খেলোয়াড় 6: জন 4 খেলোয়াড় 2: মেরি 22 প্লেয়ার 1: প্যাটেল পনের খেলোয়াড়: এগারো 23 খেলোয়াড় 5: অ্যান 30 খেলোয়াড় 7: কঠোর 23 প্লেয়ার 12:অ্যাবি দুই প্লেয়ার 13: নিকি 6 খেলোয়াড় 9: জেরেমি 7 প্লেয়ার45:কিনা

এখন, আমরা নিম্নলিখিতভাবে সাজানো সেটের সদস্যদের উপর পুনরাবৃত্তি করতে পারি:

zscan লিডারবোর্ড 0

আউটপুট:

প্রত্যাবর্তিত ফলাফল সেটে কার্সারের মান হল 0 যার অর্থ হল প্রথম পুনরাবৃত্তির শেষে সমস্ত সদস্যকে ফেরত দেওয়া হয়েছে। এই ক্ষেত্রে, যেহেতু সদস্য সংখ্যা কম, রেডিস এই সদস্যদের প্রতিনিধিত্ব করে একটি একক-বরাদ্দ প্যাকড এনকোডিং ব্যবহার করে। অতএব, যতক্ষণ না একটি সর্বোচ্চ প্যাক আকার বা সদস্য সংখ্যা না পৌঁছায়, কমান্ডটি সাজানো সেটের সমস্ত সদস্যকে ফেরত দেয়। একে পূর্ণ পুনরাবৃত্তি বলা হয়। কারণ প্রথম পুনরাবৃত্তির শেষে, আমরা সব দশজন সদস্য এবং তাদের স্কোর পাই। যদি আমাদের শত শত সদস্য থাকে, এটি মেমরিতে একটি হ্যাশ টেবিল হিসাবে উপস্থাপন করা হয়। সুতরাং, সমস্ত সদস্যদের ফিরে আসতে বেশ কয়েকটি পুনরাবৃত্তি লাগে।

COUNT প্যারামিটারটি পুনরাবৃত্তিতে ফিরে আসা সদস্যদের সংখ্যা সীমিত করতে ব্যবহার করা যেতে পারে। ডিফল্টরূপে, এই আর্গুমেন্টটি 10 ​​এ সেট করা হয়। যদি সাজানো সেটে শত শত সদস্য থাকে, তবে এটি মেমরিতে একটি হ্যাশ টেবিল দ্বারা উপস্থাপন করা হয়। সুতরাং, প্রত্যাবর্তিত সদস্য সংখ্যা প্রতি পুনরাবৃত্তি প্রতি দশের কাছাকাছি। সাজানো সেটটি খুব ছোট হলে COUNT আর্গুমেন্টের মান উপেক্ষা করা হয়।

কেস 2 ব্যবহার করুন - সেই খেলোয়াড়দের আনুন যাদের নাম 'J' অক্ষর দিয়ে শুরু হয়

ZSCAN কমান্ডটি একটি প্যাটার্ন মিলের উপর ভিত্তি করে ফিরে আসা সদস্যদের ফিল্টার করতে ব্যবহার করা যেতে পারে। সেক্ষেত্রে MATCH যুক্তি উল্লেখ করতে হবে।

আগের ব্যবহারের ক্ষেত্রে একই উদাহরণ ব্যবহার করা যাক। প্রয়োজন হল সেই খেলোয়াড়দের আনতে হবে যাদের নাম “J” অক্ষর দিয়ে শুরু হয়। এটি শুধুমাত্র গেম সম্পর্কিত পরবর্তী দুর্দান্ত বৈশিষ্ট্যটি বাস্তবায়ন করার জন্য। MATCH যুক্তি নিম্নরূপ নির্দিষ্ট করা যেতে পারে:

zscan লিডারবোর্ড 0 ম্যাচ * জে *

এটি আদর্শভাবে দুই সদস্যকে ফিরিয়ে দেওয়া উচিত যাদের নাম জেরেমি এবং জন।

উপসংহার

সংক্ষেপে, ZSCAN কমান্ডটি একটি Redis সাজানো সেটের সদস্য এবং স্কোরগুলির উপর পুনরাবৃত্তি করতে ব্যবহৃত হয়। এই কমান্ডটি SCAN কমান্ডের মতোই আচরণ করে, ZSCAN কমান্ডটি প্রথম আর্গুমেন্ট হিসাবে সেট কী গ্রহণ করে। ব্যবহারের ক্ষেত্রে যেমন আলোচনা করা হয়েছে, ZSCAN কমান্ডটি MATCH এবং COUNT আর্গুমেন্ট নির্দিষ্ট করে বিভিন্ন উপায়ে ব্যবহার করা যেতে পারে যেখানে আপনি সদস্য এবং সংশ্লিষ্ট স্কোরগুলি পুনরুদ্ধার করতে পারেন যা একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে এবং প্রতি পুনরাবৃত্তির সদস্য সংখ্যা সীমিত করে। সামগ্রিকভাবে, সার্ভার বা ক্লায়েন্ট ব্লক না করে একটি সাজানো সেটের সদস্যদের পুনরুদ্ধার করার সময় ZSCAN কমান্ডটি কার্যকর হতে পারে।