مقدمه
دستور SCAN
در ردیس یک ابزار قدرتمند برای پیمایش کلیدهای پایگاه داده به صورت کارآمد و با مصرف بهینه منابع است. برخلاف دستور KEYS
که میتواند در محیطهای عملیاتی باعث مشکلات عملکردی شود، SCAN
به صورت تدریجی و مبتنی بر cursor کار میکند.
مفاهیم پایه
مقایسه SCAN و KEYS
- KEYS: تمام کلیدهای مطابق الگو را یکجا برمیگرداند – مناسب محیطهای توسعه اما خطرناک در تولید
- SCAN: کلیدها را به صورت صفحهبندی شده (paginated) بازمیگرداند – ایمن برای استفاده در محیطهای عملیاتی
ساختار دستور SCAN
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
کاربرد عملی SCAN
مثال پایه
SCAN 0
خروجی:
1) "15" # cursor بعدی
2) 1) "key:12"
2) "key:8"
3) "key:3"
...
استفاده از COUNT
برای کنترل تعداد کلیدهای بازگشتی در هر مرحله:
SCAN 0 COUNT 20
فیلتر کردن با MATCH
SCAN 0 MATCH "user:*"
فیلتر بر اساس نوع داده
SCAN 0 TYPE string
نکات پیشرفته
رفتار cursor
- مقدار
0
نشاندهنده شروع پیمایش است - وقتی cursor به
0
برگردد، به معنای پایان پیمایش است - cursorها قابل پیشبینی نیستند و نباید ذخیره شوند
الگوریتم SCAN
- از الگوریتمی استفاده میکند که تضمین میکند:
- همه کلیدها حداقل یک بار دیده میشوند
- ممکن است کلیدها بیش از یک بار ظاهر شوند
- تعداد واقعی کلیدهای بازگشتی ممکن است با مقدار COUNT متفاوت باشد
مثالهای کاربردی
پیمایش تمام کلیدها
SCAN 0
SCAN 15 # استفاده از cursor برگشتی از مرحله قبل
جستجوی کلیدهای خاص
SCAN 0 MATCH "cache:*" COUNT 100
جمعآوری آمار
# شمارش کلیدهای نوع hash
SCAN 0 TYPE hash | wc -l
بهترین روشها
- همیشه در محیط تولید از SCAN به جای KEYS استفاده کنید
- برای مجموعههای بزرگ، مقدار COUNT را افزایش دهید (مثلاً 1000)
- از ترکیب MATCH و TYPE برای فیلتر کردن دقیقتر استفاده کنید
- cursorها را ذخیره نکنید – ممکن است بین درخواستها تغییر کنند
- برای مجموعههای بسیار بزرگ، SCAN ممکن است همچنان زمانبر باشد
نتیجهگیری
دستور SCAN یک ابزار ضروری برای مدیریت کارآمد کلیدها در ردیس است. با درک صحیح از نحوه کار cursorها و پارامترهای مختلف این دستور، میتوانید به صورت بهینه دادههای خود را پیمایش و مدیریت کنید بدون آنکه بار غیرضروری بر روی سرور ایجاد شود.