از Pista Academy حمایت کنید
خلاصه آموزشی
مرور سریع مفاهیم اصلی پیش از تماشای کامل یا برای جمعبندی بعد از آموزش.
در جلسه 16 آموزش Redis از صفر تا حرفهای، مدرس به بررسی سورتد لیست (Sorted Set) در Redis میپردازد. این ساختار داده ممبرها را بر اساس اسکورهای آنها مرتب میکند و به دستورات مختلفی مانند `ZADD`, `ZSCORE`, `ZCOUNT`, `ZPOP`, و `ZRANGE` اشاره میکند. همچنین، به استفاده از دستورات `REVRANGE`, `LIMIT`, و `SKIP` برای کنترل و مرتبسازی دادهها پرداخته شده است.
نکات کلیدی
سورتد لیست در Redis ممبرها را بر اساس اسکورهای آنها مرتب میکند.
دستوراتی مانند `ZADD`, `ZSCORE`, `ZCOUNT`, `ZPOP`, و `ZRANGE` برای کار با سورتد لیست استفاده میشوند.
دستور `REVRANGE` به صورت معکوس لیستها را ارائه میدهد.
استفاده از دستورات `LIMIT` و `SKIP` به کنترل تعداد اlements در خروجی کمک میکند.
متن ویدیو
متن زمانبندیشده این جلسه برای مرور، جستجو و دسترسی سریعتر.
سلام عرض میکنم خدمت دوستان عزیز. بریم سراغ بحث بعدیمون. میخوایم راجع به سورتد
لیست یه دو سه جلسهای صحبت بکنیم. سورتد
لیست.
سورت ست ببخشید. ما راجع به ست قبلاً صحبت کردیم. میخوایم
بریم سراغ سورتدت.
توی سورتد اتفاقی که میفته اینه که
میاد
یک مجموعهای از استرینگها رو ذخیره میکنه و ترتیب ذخیرهشون بر اساس یک
مقداریه.
مثلاً شما فرض کنید یه چیزی دارید به نام
ممبر یه چیزی دارید به نام اسکور
میاد ممبرها رو سورج میکنه بر اساس
اسکوری که جلوشه
اگه بخوام تعریفشو بهتون بگم بذارید منی این عین متنشو کپی کنم بیارم
اینجا براتون
خب اینطور میشه این میشه سورت تعریف سورتد
لیست حالا اون رنگشو مشکی کنم که ببینید
فونتشم بذارید یه چیز دیگه بذارم
الان یه چند تا مثال براتون میزنم که این مطرح براتون جا بیفته که درق سورتد لیست
چیه
مثلاً فرض یه همچین چیزی رو بچهها بذارید من یه تصویر بیارم
یه عکس بیارم یه سورتد لیست
اینو نگاه کنید بچهها این یه سورتد لیسته الان
یه چیزی داره به نام ممبر مثلاً
و یه اسکور که میاد بر اساس اسکور اینو
سورت میکنه از کوچیک به بزرگ اینم که
اسمشه اسم این در حقیقت سورتدت لیستهست
سورتد سته
کامندای مخصوص به خودشم داره و فقط چند تا
ویژگی داره که من یه بار دیگه بگم این
ممبرا بچهها یونیکن نمیتونه تکراری باشه
اما اسکورپ میتونه تکراری باشه مشکلی
نداره سود شده است و از کم به زیادم سرت
میشه
اینجا بچهها مفهومی به نام کلید و ولیو
نداریما اینو دقت بکنید ما یه ممبر داریم
یه اسکور داریم خب بریم سراغ کامنداش و یه
چند تا مثال با همدیگه ببینیم
[گلویش را صاف میکند] از کامنداش
اولین کامندی که داره زد اده یا زیده خب
که برای اضافه کردن یک چیزی به درق این
سورتدیز استفاده میشه
یه دستور دیگه داره به نام زد اسکور که
برای اینکه شما اسکور یک چیزی رو
برگردونید بریم با هم ببینیم میایم اینجا
یه نی نوتبک باز میکنم
خب
مثلاً میزنم
زی اد
یه اس براش میزنم پروداکس مثلاً
اسکورشو میذارم و اسمش اون استرینگه
[گلویش را صاف میکند] یا ممبرشو میذارم دارم مثلاً مانیتور
خب این یک برگردون یعنی اوکیه
حالا مثلاً من بخوام اسکول مانیتورو ببینم باید به چی بگم بگم که زد اسکور
پروداکتس مانیتور
۴۵رو بهم برمیگردون در قالب استرینگم برمیگردونم که یادتون باشه وقتی عددی رو
ذخیره میکنید توی ردیس در قالب استرینگ
برمیگرده
اگرم بخواید در حقیقت
چیزی رو حذف بکنید با دستور زدره
طبیعتاً الان من خط بعدی بگم که مانیتور بمسکورشو برگردون چون وجود نداره دیگه
برنمیگردونه
دستورای دیگهش اجازه بدید بذارید من داکومنت
اینم بدم بهتون این زیاده یه سری پارامترم
داره
مثل من ایکس و ایکس ایکس و کیراجوش قبلاً ما تو جلسات قبلی صحبت کردیم برای اکسپار
تایم جیتی و ال التی هم داره که حالا
میبینین سی اچ و اینام داره که توضیحاتش
این زیر هستش
این همون درق چیزایی که قبلاً راجع بهش صحبت کردیم
میبینید بسیار قوانینم شما میتونید براش
بذارید حالا نیازتون
خب بریم جلوتر خب
بریم یه چند تا دستکور دیگهشم ببینیم مثلاً
الان نگاه کنید من یکی دیگه اضافه کنم
اینجا بذارید من یکی دو تا به این اضافه
کنم
مثلاً ۱۰
مثلاً پاور
پروداکت مثلاً ۵۳ مانیتور کیبورد مثلاً
خب این الان اضافه شد یه دستوری داریم به نام خط پایین میزن زی کارت
ببینیم چی بهون برمیگردونن
پروداکتز
تعداد المانهای داخل سورتد لیستو
برمیگردونم.
اما یه دستور جالبتر داره.
این خیلی دستور جالبیه
به نام زد کانت
یا زیکانت.
اینجا رو نگاه کنید. میگم برو تو پروداکت.
پروداکت پروداکت.
خب مثلاً من محصولاتی رو میخوام که
قیمتشون فرض کن قیمت بیشتر از ۱۵ باشه
زیر ۵۰ باشه
یه دونهش برمیگرده دیگه اینو باید
برمیگرده میکن میگه یه دونهست اینه فقط
[صدای خرناس] پس با این دستور شما میتونید ببینید که
چند تا محصول دارید که تو این رنج قیمته
یه نکته هم بگم میگم مثلاً اینو بکنم ۵۳
تا خود ۵۳ میره ها میشه ۲ تا یعنی اینا رو
حساب میکنه بزرگتر مساوی کوچکتر مساوی
اینو دقت کنید [صدای خرناس] اما اگه بیام
قبل یه پرانتز بذارم
معنیش اینه که ۵۳و حساب نکن عین همین برای
اینم هست مثلاً اینو بذارم ۱۰ میشه ۲ تا
دوباره چون ۱۰ هم حساب بکنیم حالا قبل ۱۰
یه پرانتز بذارید ۱۰و حساب نمیکنه میشه
یه دونه دوباره پس شما میتونید با اون
پرانتزه عملیات مساوی یا نبودنشو مشخص
بکنید.
اینم دستور زد کانت که دستور جالبیه.
خب بذار ببینم دیگه دستور دیگهای داریم
اینجا چیزی به درد بخور. آها
یه چیز دیگه بریم اینفینیتی مثلاً منفی
اینفینیتی مثبت اینفینیتی یعنی از منفی
بینهایت تا مثبت بینهایت سه تا رو بهم
برمیگردونه که خطا داد.
فکر کنم از یه سمتشو اینفینیتی نمیشه گذاشت
فکر کنم آره بله
فکر کنم میگه دو طرفتو نمیتونی
بذار ببینم قبول میکنه اینو اینم درسته پس یه طرفشو شما میتونید بینهایت تعریف
کنید دو سمتش رو اجازه نمیده بهتون
اینم از این
دستور بعدی هم دستور جالبیه خب اینو ببندم
یا همینجا بذارم
اسمش از زد
پاپ
مین
میگم برو تو پروداکت
مثلاً د تا از کمترین مقادیر اسکور رو پاک
کن پاپ کن اصطلاحاً الان میره تو این اینو
پاک میکنه
اینم پاک میکنه ولی ۵۳و نگه میداره چون
این د تا کمترن
نگاه کنید میگه من این د تا رو پاک کردم الان فقط همین یه دونه کیبورد ۵۳ مونده
من یه بار دیگه اینو ران کنم برعکس اینم
داریم
میره د تا بالاییا رو پاک میکنه. این دفعه رفت سراغ این د تا بالای و پایینی رو
نگه داشت. پس یه زد پاپ میم داریم یه زد
پاپ مکس داریم که میاد از بالا پایین اگه
بخواد چیزی رو حذف بکنی براتون حذف
میکنم.
آیا این امکان وجود داره اسکوررو ما تغییر
بدیم بعد از اینکه ذخیره کردیم؟ بله
امکانش هست یه دستوری داریم به نام
زد اینکریمنت بای خب مثلا مثال
میگم زد اینکریمنت
بای
میگم برو پروداکسو
۱۵ تا زیاد کن چیو مثلاً ۱۵ تا کمه مثلاً میگم
۴۰ تو زیاد کن پاور که پاور بیاد بالای
مانیتور
شد ۵۰ الان پاورم شد ۵۰ سورتم اون عوض
میشه بچهها
سورتمون قطعاً عوض شده
دستور بعدی بذار من یکی یه دونه دیگه به این اضافه کنم یه بار دیگه اینو اضافه کنم
زد ات
پرو فروکس
مثلاً
چند بزنیم خدا رو خوش بیاد این یکی رو
مثلاً ۳۵ اسپیکر میزنم
خب چرا بکنیم ماتو باذا اینو بکنیم پی خب من
دوباره اینو اد میکنم حالا میایم اینجا
یه چیزی بهم زد رنج
دستور زیاد داره بچهها من دارم اصلیشو
بهتون میگم
میگم برو پروداکس
از رنج اول تا دوم دومو بهم برگردون
اسماشم میخوام ویت
اسکور
ببینید چی بین برمیگردونه اول و دوم فکر کنم میشه این که صفره این یکه این دوئه
بعد مانیتور و اسپیکر برگردونه احتمالاً
درسته
اسپیکر مانیتور اسپیکر یکه مانیتور دو اگه
بگم صفر تا د اون پاورم فکر کنم میره جز
چرا؟ چون پاور ایندکسش صفره رنکش صفره
پس شما میتونید رنج مشخص بکنید بگید از
این رنج تا این رنجو بهم برگردون
یه جور دیگه همیشه به این مقدار داد بچهها من اینو باز
میگم برو تو پروداکس
اونایی که اسکولشون حداقل مثلاً صفره
و حداکثر ۴له رو بهم برگردون بای اسکور
یعنی دیگه با ایندکس کار نشدش با اسکورشو
نگاه کن ویت
اسکورز اسکورزشونم بهم نشون بدم
با این تفا کیا برمیگردن پاور میفته تو
این رنج و اسپیکر تو رنج صفر تا ۴۰
و زد رنج بچهها خیلی چیز پرکاربردی
میتونه باشه و کلی میتونه کوهای باحال
بهمون بده
اینجا هم بچهها شما باز قانون چیزو
داریدا مثلاً اینجا من بزنم ۵۳ کیبوردم
میاره جز خب کیبوردم آورد همشون آورد یه
سر بزنم ۴۵
مانیتورم میاره حالا اگه قبل ۴۵ پرانتز
بذارم دیگه مانیتورم نمیاره میگه دیگه
کوچکتر مساوی نیست منظورم کوچکتر از ۴۵
اون اینفینیتی و اینام اینجا هست قاعدش
آیین اونام میتونید استفاده
بذارید اینو با هم ببینیم مثالشو میگم برو تو پروداکس
یک و دو ریورسش بکن
لیمیت
وان تو ببینیم چی به میده
بذارید ببینم مثالاشو من یه بار دیگه ببینم چی رو
اشتباه زدم
بذارین یه تیکه لیمیتشو من بردارم ببینم اول خروجی این چی میشه که
خب پاورو مانیتور آورد و پاورم بچهها
پاور مانیتور خب این درسته الان بیت اسکور
کنم ریورسه چیکار میکنه
ویت اسکورز اس داشت
پاور ۵۰ مانیتور
بذار من یه دونه کلاً جدید بذارم اینو [گلویش را صاف میکند] بذارم د
یه اسم جدید بهش بدم
میگم که برو تو این
الان یه دونه جدید خالی برگردوند کلاً
اینو ران نکرده بودم نه فرقی نکرد
خب این اوکی شد اینو فعلاً نیایم پرو
مانیتور ۴۵ بذار من یه دونه پایینشم باز کنم بدون ریوشم ببینیم
اینجا بدون ریو میاد چیکار میکنه الان یک کیه بچهها یکمون میشه
اسپیکر دومون میشه مانیتور درسته اما
اینجا اومد برعکس بهم میده یعنی اون
اردرشو برعکس میکنه مانیتورو میاره اول
اسپیکر میبره دوم پس ریو اردررو برعکس
میکنه ریورسه خب حالا یه چیز دیگه
من اینو بردارم [گلویش را صاف میکند]
میگم بای اسکور میخوام اینو ببینیم چیه
لیمیت
وان تو
اینو بکنم س فرقی نکرد این لیمیتش کلاً مثل اینکه
مسئله داره آها بای اسکور زدم یک و سه زدم
با ببخشید ببخشید از صفر مثلاً تا ۶۰
الان درست شد حالا چیکار کرد بذارین
لیمیتو بردارم
اینو برم بالا
بدون لیمیتشو ببینید
این بدون لیمیته الان کلشو آورد دیگه هر چار تاشو آورده با لیمیت اومده چیکار کرده
گفتم که برو از اولی شروع کن
کاری که میکنه اینه که میگه که تا اینجا تو چیکار میکنی؟ میگه تمام المانهایی که
اسکولشون صفر تا ۶۰ رو بهم برگردون میشه
اینا خب بعد میگه اولی رو بیخیال شو یعنی
پاوررو بیخیار شو د تای بعدیشو بهم بده
معنیش اینه پس شما میتونید در حقیقت حتی
اون خروجی که داره میاد رو هم محدود بکنید
به اون چیزی که میخواید مثلاً اینجا نگاه
کنید منو بگم دومی رم بیخیار شو د تای
بعدشو بیار مانیتور رو کیبورد آورد یعنی
این د تا رو بیخیال شد د تای بعدشو آورد
بگم یه دونه بعدشو بیار فقط مانیتوررو
میاره پس با لیمیت شما میتونید خروجی رو
هم محدود بکنید
خب من کل سورتد ستو گفتم تو یه جلسه بگم
کهه د تاش نکنیم اینم بحث سورتد ست بریم
بیایم ادامهشو جلسه بعدی صحبت کنیم فعلاً
خداحافظ
پرسشهای رایج
پاسخ کوتاه و مستقیم به پرسشهایی که معمولاً هنگام یادگیری این موضوع مطرح میشوند.
سورتد لیست در Redis یک ساختار داده است که ممبرها را بر اساس اسکورهای آنها مرتب میکند.
دستوراتی مانند `ZADD`, `ZSCORE`, `ZCOUNT`, `ZPOP`, و `ZRANGE` برای کار با سورتد لیست استفاده میشوند.
دستور `REVRANGE` به صورت معکوس لیستها را ارائه میدهد.
آخرین بهروزرسانی محتوای متنی:
آموزش جامع و کاملاً عملی Redis به زبان فارسی؛ از نصب و راهاندازی تا پیادهسازی الگوهای حرفهای. در طول این دوره تمرینمحور، یک اپلیکیشن فروشگاه اینترنتی میسازیم و با مفاهیمی مثل مدلسازی داده، جستجو، همزمانی و ارتباط سرویسها در دنیای واقعی کار میکنیم. در این دوره چه یاد میگیرید؟ راهاندازی Redis بهصورت لوکال و کار با CLI دستورات افزودن و Query گرفتن از دادهها کار با Hashها، Listها، Setها و Sorted Setها (رتبهبندی و امتیازدهی) ایجاد یکتایی داده با Setها + تمرینهای عملی Pipelining برای بهینهسازی کارایی Design Patterns قدرتمند مخصوص Redis و نکات و Gotchaهای مهم تبدیل مدلهای رابطهای به مدل Redis (Data Modeling) HyperLogLog برای شمارش تقریبی توسعه قابلیتها با Scripting مدیریت Concurrency و حل مسائل همزمانی جستجو و فیلتر پیشرفته با RediSearch (Querying & Search in Action) ارتباط بین سرویسها با Streams پیادهسازی و تمرین مستمر روی پروژه E-Commerce مخاطبان برنامهنویسان بکاند و فولاستک، مهندسان داده و هرکسی که میخواهد Redis را بهصورت کاربردی و پروژهمحور یاد بگیرد.