از Pista Academy حمایت کنید
خلاصه آموزشی
مرور سریع مفاهیم اصلی پیش از تماشای کامل یا برای جمعبندی بعد از آموزش.
در این جلسه آموزشی، معلم به بررسی مشکل همزمانی در فرآیند ثبت قیمت کالا در یک فروشگاه با استفاده از Redis میپردازد. مشکل اصلی این است که در هنگام دریافت چندین درخواست همزمان، فقط یکی از درخواستها پذیرفته میشود و دیگریها رد میشوند. راهحل پیشنهادی شامل استفاده از حالت ایزوله (isolated) در Redis است تا اطمینان حاصل شود که هر درخواست به صورت منحصر به فرد و بدون تداخل اجرا شود. همچنین، معلم به نحوه استفاده از ساختار سورت شده (sorted set) در Redis برای نمایش کالاهای با قیمت بالا و بهروزرسانی آن با قیمت جدید میپردازد.
نکات کلیدی
استفاده از حالت ایزوله (isolated) در Redis برای جلوگیری از مشکل همزمانی در ثبت قیمت کالا.
استفاده از ساختار سورت شده (sorted set) در Redis برای نمایش و بهروزرسانی کالاهای با قیمت بالا.
نیاز به مدیریت همزمانی در سیستمهای فروشگاهی برای جلوگیری از تداخل درخواستها.
Redis به عنوان یک ابزار مناسب برای مدیریت دادههای فروشگاهی با عملکرد بالا و قابلیتهای همزمانی.
متن ویدیو
متن زمانبندیشده این جلسه برای مرور، جستجو و دسترسی سریعتر.
سلام عرض میکنم خدمت دوستان عزیز. بریم سراغ ادامه بحثمون. یه باگی الان این
برنامهای که ما داریم داره. خب اونم اینه
که فرض کنید همزمان یه تعدادی کاربر اومده
باشن روی این کالا و میخوان یه قیمتی رو
ثبت کنن. کاملاًهم همزمان. خب
اونوقت چه اتفاقی میفته؟ کدوم یکی از این
قیمتها رو قبول میکنه؟ در حقیقت دیتابیس
ما اون برنامه
بریم اصلاً این شرایطو به وجود بیاریم. من
میخوام همزمان یه سری شرط این بذارم. این
صفحه رو بچهها باز کنید کلیک راست
اینسپکتو بزنید میاد. بعد این علامت سلکت
المنتی که این بالا هستو انتخاب کنید. این
دکمه رو انتخاب کنید که اینجوری هایلایت
بشه. خب بعد میاید چیکار میکنید؟
فقط حتماً دکمه هایلایت شده باشه مینویسید فور
لت آ مساوی صفر
آکتر از ۱۵
آ پلاس پلاس
میگم اینجا چیکار کن این دکمه رو کلیک کنش
به تعداد ۱۵ دفعه اینو ران میکنم خب چه اتفاقی افتاد الان
یه دفعه اجرا شد یه رفرش بدم
یه دفعه اجرا شد ولی من میخواستم بیشتر اجازه بدید ببینم
چرا دکمه که هایلایته
خب خب مشکل اینجاست که من وقتی میرم صفحه کنسول عملاً دیگه اینجا نیستم که این سلکت
شده باشه چیکار میکنید؟ یه بارگین انتخاب
کنید این آبی باشه بعد دکمه اسکیپ
کیبوردتونو بزنید بالا سمت چپ این پای
صفحه کنسول باز میشه خب پس این دکمه
هایلایت شده باشه اسکیپو بزنید صفحه کنسول
همین جا باز بشه یه بار دیگه بنویسیم فور
لتآی
مساوی صفر
مثلاً آی کوچکتر از ۱۵ بار من میگم آی پلاس پلاس در این صورت چیکار کن؟
همین دکمه رو
خب آن ولیدیشن نزدم [صدای خرناس] یه بار دیگه
خب الان شد نگاه کنید ۱۵ تا ریکوست زد خب حالا اینجا چه اتفاقی افتاده؟ ببینیم
ببینیم چه اتفاق افتاده یه رفرش بدم ببینم
۱۵ تا رو ازم قبول کرده نه بازم ۱۵ تا رو
قبول نکرده اینم کرده یه دونه خب آها ۱۵
گذاشتم خب بذارم ۱۶ ببخشید
یه بار دیگه
بذار من فقط مطمئن شم این انتخاب شده اونم
باشم ۱۶ اینم این الان بریم
آها الان شد نگاه کنید اومد همه ریکوستهای
منو انجام داد
خب و و این یک ایراد بزرگه. اینو باید حلش
بکنیم. برای حل کردنش میایم چیکار
میکنیم؟
اینجا که داریم درقدر ریکوستو میبریم سمت
بک اندمون اینجا من باید اینا رو خب ببرم تو یه حالتی که بهش میگن حالت در
حقیقت ایزوله شده. خب یا ایزولیتد کانکشن.
چهجوری این کارو میکنم؟ خیلی ساده این
تغییری که اتفاق میفته بچهها خیلی ساده
است. میام اینجا
کل اینو
برمیدارم
کلشو برمیدارم خب میگم ریترن کن
کلا. یه چیز داره به نام ازکیوت ایزولتد
اگزکی ایزولتد درسته؟ آره خب بعد میگم
ایسینک
[گلویش را صاف میکند] ایزولیت
تد
کلاینت
همه رو میارم داخل این اولین تغییر خب اینا ارم میتونید اینتاشو درست کنید
اینجوری
یه کلید میونبرد داره اینو یه دفعه انجام میده من یادم رفته چیه
که نخواد اینجوری دونه دونه بزنه حالا یه
تیکه رو بزنیم باشه خب
این کاری که انجام دادیم استپ بعدی چیه
استپی اینه که
بیایم
یه واچ تعریف بکنیم این بالا
میام این بالا
یه واچ تعریف میکنم اویت
کت واچ
میگم حواست به این آیتمه باشه
آیتمز کی
ایت
واقعاًم همین کارو میکنه یعنی واقعاً حواسش به این هست خب خب میگم حواست به این
باشه میخوام یه کاری بکنیم برام میام این
پایین خب
من اینو برمیدارم بچهها این این
پرامشالو برمیدارم
اینم باید برداریم دیگه خب به جاش چی میذارم یه چیزی داره به نام ایزولتد
کلاینت
مولتی
یه مولتی میذارم
بعد این کلاینتو دیگه برمیدارم
کنت پاینیلم برمیدارم
این ویلگولم دیگه نمیخواد این پشت همه
اجرا میشه یعنی مول.آپوش آر پوش میچسبه
به این حالا برای اینکه واضحتر بشه
بذارید اینو برم خط پایین بنزید
میری میبره پشت این اینو حالا در نهایت یه دونه اینجا هم
و تموم این مشکل ما رو حل میکنه بچهها این
تغییری که اتفاق افتاد مشکل ما رو حل
میکنه الان میخوایم بریم چک کنیم پس یه
بار دیگه با هم ببینیم کاملشو اگه بخوایم
ببینیم یه همچین چیزیه بچهها این کاملشه
اینجا یه
اگزکی ایزولت درست میکنیم بعد میبریمش تو
واچ این پایینم به جای پایپلان میام سراغ
این خب حالا بریم یه چک کنیم
من یه رفرش بدم همه چیو خب
الان رو ۱۶ه درسته
این دکمه رو انتخاب میکنم
اینو میذارم روی ۱۷
مثلاً بذار بذارم رو ۲۰ که نمودارهم قشنگ
معلوم باشه فور
لد آ مساوی صفر آ کوچکتر از ۱۵ آ پلاس
پلاس
چیکار کن
هشتگ صفر کلیک
خب داره میره
ببینیم فقط اون اتفاقی که میخوایم داره
میفته یا نه
آیا جلوی اونو گرفت یا نگرفت خب یه رفرش
بدم اینا ببینیم جلوشو گرفت یا نه
جلوشو گرفت بچهها فقط یه دونه ریکوست منو
قبول کرد و اینم شد ۴ یعنی تو اون هیستوری
من دیگه نیومد همه رو ببره اینجوریشون
نمودار یه دونهشو اینجا اکسپت کرد و بقیه
رو دیگه قبول نکرد این میشه
این کهه شما چلو چهجوری جلوی در حقیقت
کانکارنسی رو بگیرید همزمانی رو بگیرید
خب ویدیومو یه ذره میخوام طولانی بکنم برم د تا قسمت دیگه این برنامه رم درست کنیم
که دیگه ببندیمش این قسمتو خب من اینو
ببندم این کاری ندارم میریم سراغ قسمت
موست اکسپنسیو. اینو چهجوری درستش بکنیم؟
به ترتیب باید گرونترین آیتم رو نشون
بده. اونایی که بالاترین قیمتو گ دارن.
اتفاقی که میفته اینه که بچهها من باید
یه دونه سورتد ست درست بکنم. خب
هر دفعه که یه آیتمی ساخته میشه بار اول
تو اون سورتد سته میاد آیتم اد میشه با
قیمت صفر. حالا هر بار که یکی میاد یه
شرطی رو یه قیمتی رو رو اون آیتمی میذاره
اون سورت سته آپدیت میشه با اون قیمت
جدیده بعد سورت ستم ویژگیش اینه که خودش
سورت میکنه دیگه به اثر قیمت خودش سورت
میکنه و فقط کافیه که بگم مثلاً ۵ تای
آخر اون سورت ستو بیار اینجا نشون بده خب
بیایم توی کلید
اول یه کلید برای اون سورت سته درست کنم آیتمز بای
کرایس
کی
مساوی
آیتم دو نقطه پرایس اسم سورتشو میذارم این خب این از این اسم بعدی چیه
اونجایی که
آیتمه داره درست میشه
اول بم ایمپورت کنم اینو برم تو آیتم
اینو ایمپورت کنم اونجا که آیتم داره درست میشه اینجا من باید اینو برم ادش بکنم به
این سورتته درسته که با یه قیمت صفر خیلی
ساده این کارو میشه این پایین انجام داد
بعد از این یه ویلگول میذارم
مینویسم کلاز
zز
آیتمز با پراس کی اسم سورتتمون این بود چی میگه بهم اضافه کن میگم یه همچین چیزی بهش
اضافه کن
ولیو بشه آیدی اون کالا
و اسکولشم بشه صفر
خب اینم میگم اضافه کن تو شته این استپ استپ دوم چیه موقعی که داره شرط یا قیمت
گذاشته داشته میشه رو در حقیقت حالا اینجا
اینجا هم باید بره اون اسکوره رو آپدیت
کنه پس میام اینجا
اینم باید اینجا ایمپورت بشه
خب حالا اینجا این انتها دقیقا باید تو این مولتیه
باید بگم که اینجا
زد
ات آیتم
این
ولیو باشه د نقطه آیتم. آیدی و اسکرولشم
باشه اتریوس.
اما
خب اینم از این این میره اونجا اینو آپدیتش میکنم
دیگه چی
اینم باید بریم آپدیت کنیم بچهها بای پرایس اینم باید بریم بنویسیمش اینجا این
میره اون سورت سته رو میخونه میره سورت
سته رو میخونه مقادیرشو یه تعدادشو
برمیداره میاره نمایش میده میده
خب بذارید من چیزایی که لازم داریمو بیارم
ایمپورت کنم این بالا هر کدوم لازم داریم
ا اینجا عزیز اینجا کدوما لازم داریم
کلاینتو لازم داریم اینو نمیخوایم
بعد دیسرلایزو میخوایم
این د تا رو نمیخوام
پس تو اینم آیتمز با پرایس [ __ ] میخوام با
آیتمز کی رو میخوام این د تا رو نمیخوام
[گلویش را صاف میکند] یه دونه بای ویو داشتیم شبیه همینه بچهها
بریم اینو کپی کنیم
بیارمش اینجا یه چیز شبیه اینه چون باید یه تغییراتی بدیم
این میشه این
خب [صدای خرناس] این درسته
بعد
دیگه چه تغییری باید بدیم
هیچی همینه تغییرش همینه بریم اینو چک کنیم یه رفرش بدم
خب دلیل که اینجا نشون میده که اون سورت ست من خالیه اصلاً حواسم نیست خب پس
ببینید چند تا کالا جدید اضافه کنیم
مثلاً بزنید
یه دونه واچ اضافه کنم جدید باشه مثلاً
اینم میذارم یه روز
یه قیمت میذارم مثلاً ۱۵ تا فعلاً این رفت تو سورت ست من اضافه شد با قیمت ۱۵
اول صفر بود بعد رفت شد ۱۵ یکی دیگه اضافه
کنیم مثلاً
پنسل مثلاً خب اینو مثلاً میذارم همون یه روز قیمتشم میذارم ۲۰ تا این بیشتر از
اون باشه
از اون قبلی خب حالا بریم صفحه اصلی
ببینیم که این اضافه شده یا نه بله نگ کن
اول ۲۰ آورد بعد ۱۵رو آورد اینم از این
قسمت
خب این جلسه رم ببندیم ادامهش بشه جلسه
بعدی فعلاً خداحافظ
پرسشهای رایج
پاسخ کوتاه و مستقیم به پرسشهایی که معمولاً هنگام یادگیری این موضوع مطرح میشوند.
برای حل مشکل همزمانی در ثبت قیمت کالا، میتوان از حالت ایزوله (isolated) در Redis استفاده کرد تا هر درخواست به صورت منحصر به فرد و بدون تداخل اجرا شود.
از ساختار سورت شده (sorted set) در Redis میتوان استفاده کرد تا کالاهای با قیمت بالا به صورت مرتب و قابل مدیریت نمایش داده شوند.
Redis به دلیل عملکرد بالا، قابلیتهای همزمانی و ساختارهای دادهای متنوع، مناسب برای مدیریت دادههای فروشگاهی است.
آخرین بهروزرسانی محتوای متنی:
آموزش جامع و کاملاً عملی 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 را بهصورت کاربردی و پروژهمحور یاد بگیرد.