redis

مرتب‌سازی صعودی و نزولی در مجموعه‌های مرتب‌شده (Sorted Sets) – دستورات ZRANGE و ZREVRANGE

چکیده
در این مقاله، به بررسی نحوه‌ی مرتب‌سازی خودکار اعضا در مجموعه‌های مرتب‌شده (Sorted Sets) بر اساس امتیاز (Score) می‌پردازیم. با افزودن اعضای جدید به مجموعه‌ی مثال قبلی، مشاهده خواهیم کرد که چگونه داده‌ها به‌صورت پیش‌فرض به‌ترتیب صعودی (از کوچک به بزرگ) مرتب می‌شوند. همچنین با دستور ZREVRANGE آشنا می‌شویم که امکان بازیابی اعضا به‌ترتیب نزولی (از بزرگ به کوچک) را فراهم می‌کند. این قابلیت برای نمایش لیدربوردها، رتبه‌بندی‌ها، و سیستم‌های نمایش داده‌های برتر بسیار حیاتی است.

مقدمه
در بخش قبلی، با دستور ZADD برای افزودن اعضا به یک مجموعه‌ی مرتب‌شده و دستور ZRANGE برای بازیابی آنها آشنا شدیم. یکی از ویژگی‌های کلیدی مجموعه‌های مرتب‌شده، مرتب‌سازی خودکار اعضا بر اساس امتیاز است. در این بخش، این ویژگی را به‌صورت عملی مشاهده می‌کنیم و با روش معکوس‌سازی ترتیب برای نمایش داده‌ها از بیشترین به کمترین مقدار آشنا می‌شویم.

افزودن اعضای جدید به مجموعه‌ی مثال
مجموعه‌ی users:followers را که در بخش قبل ایجاد کردیم، در نظر بگیرید:

MemberScore
Adam10
Scott20
Amy30

حال دو عضو جدید به این مجموعه اضافه می‌کنیم:

ZADD users:followers 1 John
ZADD users:followers 100 David

پس از افزودن، مجموعه شامل اعضای زیر خواهد بود:

MemberScore
John1
Adam10
Scott20
Amy30
David100

ترتیب پیش‌فرض: صعودی (Ascending) با ZRANGE
همان‌طور که در بخش قبل دیدیم، دستور ZRANGE به‌طور پیش‌فرض اعضا را بر اساس امتیاز به‌ترتیب صعودی (از کوچک به بزرگ) بازمی‌گرداند:

ZRANGE users:followers 0 -1 WITHSCORES

خروجی:

1) "John"
2) "1"
3) "Adam"
4) "10"
5) "Scott"
6) "20"
7) "Amy"
8) "30"
9) "David"
10) "100"

همان‌طور که مشاهده می‌شود، اعضا بر اساس امتیاز از کمترین (1 برای John) تا بیشترین (100 برای David) مرتب شده‌اند.

ترتیب نزولی (Descending) با ZREVRANGE
در بسیاری از کاربردها، مانند نمایش لیدربورد یا لیست کاربران برتر، نیاز داریم که داده‌ها را به‌ترتیب نزولی (از بیشترین به کمترین) نمایش دهیم. برای این منظور، از دستور ZREVRANGE استفاده می‌کنیم که مخفف Reverse Range است.

ساختار این دستور مشابه ZRANGE است:

ZREVRANGE key start stop [WITHSCORES]

مثال: دریافت اعضا به‌ترتیب نزولی (بدون امتیاز)

ZREVRANGE users:followers 0 -1

خروجی:

1) "David"
2) "Amy"
3) "Scott"
4) "Adam"
5) "John"

مثال: دریافت اعضا به‌ترتیب نزولی به همراه امتیازها

ZREVRANGE users:followers 0 -1 WITHSCORES

خروجی:

1) "David"
2) "100"
3) "Amy"
4) "30"
5) "Scott"
6) "20"
7) "Adam"
8) "10"
9) "John"
10) "1"

همان‌طور که مشاهده می‌شود، این بار اعضا از بیشترین امتیاز (100 برای David) به کمترین امتیاز (1 برای John) مرتب شده‌اند.

مقایسه‌ی دو دستور ZRANGE و ZREVRANGE

ویژگیZRANGEZREVRANGE
ترتیب بازگردانیصعودی (Ascending) – از کوچک به بزرگنزولی (Descending) – از بزرگ به کوچک
کاربرد اصلینمایش داده‌ها به‌ترتیب طبیعینمایش لیدربورد، رتبه‌بندی برتر
پارامتر WITHSCORESپشتیبانی می‌شودپشتیبانی می‌شود
ساختارZRANGE key start stop [WITHSCORES]ZREVRANGE key start stop [WITHSCORES]

نکته‌ی مهم در مورد ترتیب قرارگیری اعضا با امتیازهای برابر
در صورتی که دو یا چند عضو امتیاز یکسانی داشته باشند، ترتیب بازگردانی آنها بر اساس ترتیب واژه‌نامه‌ای (Lexicographical) اعضا تعیین می‌شود. برای مثال، اگر دو عضو با امتیاز 10 به نام‌های "Alice" و "Bob" داشته باشیم، "Alice" قبل از "Bob" بازگردانده می‌شود.

جمع‌بندی

نیازمندیدستور پیشنهادی
دریافت اعضا از کمترین امتیاز به بیشترینZRANGE key 0 -1 [WITHSCORES]
دریافت اعضا از بیشترین امتیاز به کمترینZREVRANGE key 0 -1 [WITHSCORES]
دریافت محدوده‌ی خاص از اعضا (مثلاً ۵ عضو برتر)ZREVRANGE key 0 4 WITHSCORES (برای دریافت ۵ عضو اول)

نتیجه‌گیری
مجموعه‌های مرتب‌شده با ارائه‌ی دو دستور ZRANGE و ZREVRANGE، انعطاف‌پذیری کامل در نمایش داده‌ها به‌صورت صعودی یا نزولی را فراهم می‌کنند. این ویژگی، مجموعه‌های مرتب‌شده را به ابزاری ایده‌آل برای پیاده‌سازی سیستم‌های رتبه‌بندی، لیدربوردهای بازی‌های آنلاین، لیست‌های برترین‌ها در حوزه‌ی مالی و هر سناریوی دیگری که نیاز به نمایش داده‌ها بر اساس اولویت یا امتیاز دارد، تبدیل می‌کند. در بخش‌های بعدی، با دستورات پیشرفته‌تری مانند ZRANGEBYSCORE برای فیلتر کردن بر اساس محدوده‌ی امتیازی و ZINCRBY برای افزایش اتمیک امتیازها آشنا خواهیم شد.

Leave a Reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *