مقدمه
مانند سایر ساختارهای داده در ردیس، روی Sorted Setها نیز میتوان عملیات اتمی (Atomic) انجام داد. منظور از عملیات اتمی، اجرای دستوراتی است که به صورت واحد و بدون تداخل با عملیات دیگر انجام میشوند. در این بخش، به طور خاص به عملیات افزایش و کاهش امتیاز اعضا میپردازیم.
دستور ZINCRBY
برای افزایش یا کاهش اتمی امتیاز یک عضو در Sorted Set از دستور ZINCRBY استفاده میکنیم. ساختار این دستور به صورت زیر است:
ZINCRBY key increment member
increment: عددی است که میتواند مثبت (برای افزایش) یا منفی (برای کاهش) باشد.
مثال عملی: افزایش امتیاز
فرض کنید میخواهیم تعداد دنبالکنندگان Adam را ۵ عدد افزایش دهیم. از دستور زیر استفاده میکنیم:
ZINCRBY users:followers 5 Adam
خروجی: "15"
این خروجی نشان میدهد که امتیاز جدید Adam پس از افزایش، ۱۵ است (از ۱۰ به ۱۵ رسیده است).
مثال عملی: کاهش امتیاز
حال فرض کنید Scott ۵ دنبالکننده از دست داده است. برای کاهش امتیاز او از دستور زیر استفاده میکنیم:
ZINCRBY users:followers -5 Scott
خروجی: "15"
امتیاز Scott از ۲۰ به ۱۵ کاهش یافته است.
رفتار دستور هنگام وجود نداشتن عضو
اگر عضوی که میخواهیم امتیاز آن را تغییر دهیم در Sorted Set وجود نداشته باشد، چه میشود؟
ZINCRBY users:followers 5 Hans
خروجی: "5"
در این حالت، دستور ZINCRBY به طور خودکار:
- عضو جدید (Hans) را به
Sorted Setاضافه میکند. - امتیاز مشخصشده (۵) را به عنوان امتیاز اولیه برای آن عضو در نظر میگیرد.
تأیید نهایی
برای اطمینان از تغییرات، میتوانیم تمام اعضا و امتیازها را مشاهده کنیم:
ZRANGE users:followers 0 -1 WITHSCORES
نتیجهگیری
دستور ZINCRBY یک ابزار قدرتمند برای:
- بهروزرسانی اتمی امتیاز اعضای موجود
- کاهش یا افزایش امتیاز به صورت کنترلشده
- افزودن خودکار اعضای جدید در صورت عدم وجود
این ویژگی برای سناریوهای بلادرنگ مانند بهروزرسانی امتیازات کاربران، تغییر رتبهها در جدول رهبران و مدیریت موجودی بسیار ایدهآل است.