از Pista Academy حمایت کنید
خلاصه آموزشی
مرور سریع مفاهیم اصلی پیش از تماشای کامل یا برای جمعبندی بعد از آموزش.
در جلسه 34 آموزش Redis از صفر تا حرفهای، مدرس مشکلی در فرآیند استفاده از لاک در Redis را بررسی میکند که به دلیل اکسپایر تایم، پروسس ادامه دادن کار به دلیل عدم دسترسی به دیتا ممکن نیست. راهحل ارائه شده شامل ارسال سیگنال به کالبک برای اطلاع از اکسپایر توکن و قطع ادامه کار است. همچنین، مدرس اعلام میکند که مبحث جاری به پایان رسیده است و جلسه بعدی به مبحث جدیدی در رابطه با کوی زدن با Redis میپردازد.
نکات کلیدی
اگر زمان اکسپایر توکن در Redis به وقوع پیوست، پروسس ادامه دادن کار به دلیل عدم دسترسی به دیتا ممکن نیست.
راهحل ارائه شده شامل ارسال سیگنال به کالبک برای اطلاع از اکسپایر توکن و قطع ادامه کار است.
مبحث جاری به پایان رسیده است و جلسه بعدی به مبحث جدیدی در رابطه با کوی زدن با Redis میپردازد.
جلسه بعدی با عنوان 'ردی سرچ' ادامه خواهد داشت.
متن ویدیو
متن زمانبندیشده این جلسه برای مرور، جستجو و دسترسی سریعتر.
سلام عرض میکنم خدمت دوستان عزیز. بریم سراغ ادامه پروژهمون و یه مشکلی پروژمون
داره که باید براش یه راهحلی پیدا بکنیم.
اما مشکل کجا به وجود اومده؟ بیایم یه فراآیندی با همدیگه در نظر بگیریم. فرض
کنید دوستان یه پروسهای اومده میخواد روی
یه دونه مثلاً ۸ کار بکنه. خب مثلاً پراس
هشت مثلاً ی خب
میاد چیکار چیکار میکرد بچهها؟ میومد یه دونه لاک درست میکرد. خب میاد یه لاکی
درست میکرد با یه توکن رندمی
مثلاً یه توکن رندمک هر چیزی خب
میاد یه توکن درست میکرد
بذاشت بعد میرفت چیکار میکرد؟ بعد میرفت دیتا
رو دریافت میکرد. اون دیتایی که میخواد
روش کار کنه.
درسته؟ فرض کنید دیتاونم یه دیتایی اینجا هست مثلاً
خب که مثلاً یه کی داره
و الان در حقیقت اینو بره دریافت بکنه و روش
کار بکنه
نیمو میدیم مثلاً کار مقدارشم مثلاً میدیم ۵
این چیکار میکرد بچهها یادتون باشه میاد
یه لاک آیتم درست میکرد خب
یه لاک آیتم اینجا درست میکرد مثلاً اسمش
بود
لاک د نقطه
آیتم د نقطه ایوان
یه مقداری هم میومد براش در نظر میگیر
همون مقداری که اینجا گذاشتم من
همون این که اینجا گذاشتم و میاد مثلاً براش میذاشتم. خب
حالا فراینتو تصور کنید که بچهها این
وقتی میرفت این دیتا رو میگرفت که روش
کار بکنه
اینم مثلاً اسمشو تصور کنید مثلاً اسم
هشینه آیتم دو نقطه ایو اسم هش اینه
فرض کنید این فراآیندی که داره روی این دیتای کار میکنه یه مقدار طول بکشه
پراسس
دیتا
چه اتفاقی میفته بچهها کارش که تموم بشه میخواد بره چیکار بکنه
میخواد بره روی در حقیقت اون دیتا عملیات
رایتو انجام بده دیگه درسته
میخواد بره رو اون عمل دیتا البته رایتو
انجام بده رایت دیتا
بعدم که کارش تموم میشه چیکار میکنه؟ اون لاکه رو ریلیز میکنه که پراسس بعدی
بیاد کارشو انجام بده درسته؟ این فرایندی
بود که ما تو جلسه قبل
صحبتشو کردیم.
حالا این فنده بچهها کجاش ایراد داره؟ یه ایراد کوچیکتره.
ما یه اکسپایر تایم برای این گذاشته بودیم
یادتون باشه گفته بودیم مثلاً بعد از ۲
ثانیه اکسپایر بشه
اومدیم و این پراسزه بیشتر از ۲ ثانیه طول
کشید چه اتفاقی میفته؟
اتفاقی که میفته اینه که اگر بیشتر از ۲
ثانیه طول بکشه مثلاً فرض کنید اینجای کار
اینجا
فرض کنید اینجا ۲ ثانیهست
اینجا این توکن اکسپایر میشه
این توکن کنه اینجا اکسپایر میشه خب چه اتفاقی میفته
آیا اون پراسزه میتونه همچنان بره رو این
دیتای رایت کنه
بله میتونه
کسی جلوشو نگرفته برای این رایت کر بچهها
این قفله یه قفل من درآوردیه
عملاً که نمیره واقعاً اون دیتا رو قف
بکنه نه اکسپایرم بشه میره روی رایتشو
انجام میده اون پروسه بعدیهم م بیاد میاد
یه دونه لاک درست میکنه اونم میتونه رو
این راید کنه مشکلی نداره با این خب این
قفله فقط چیکار میکرد جلوی پراسس بعدی رو
میگرفت که اجرا نشه
ولی نمیتونه جلوی رایت شدن روی این دیتا
رو بگیره پس اکسپایر بشه اینم زمانش بیشتر
بشه میره عملیات رایتو انجام بده پس من یه
جوری باید زمانی که این توکنم اکسپایر
میشه یه سیگنالی به این کالبک فانکشنه
بفرستم بگم آقا جون توکن اکسپایر شد دیگه
اجازه نداری کارتو ادامه بدی پس باید یه
سیگنال درست بکنم براش
یعنی چی یعنی اینجا تو این کالبک فانکشنه
این کالبکمون بود دیگه گوش اینا این
کالبکمون بود توی این من باید یه جوری یه
سیگنال بفرستم بگم که آقا این سیگناله اگر
اکسپایر شده بود تو دیگه حق نداری ادامه
بدی حالت بریم اینو با هم پیادهسازی
بکنیم
خب پس من میام اینجا میگم یه تو ورودی یه سیگنال داری جنسشم میذارم رو اینی خب هر
چیزی میتونه باشه
میام اینجا
اینجا که دارم کالبک و پانکس میدم یه
سیگنال انی میذارم
خب حالا این سیگنال کی قراره اکسپایر بشه
زمانی که توکن من اکسپایر شد اینم باید چی
بشه اکسپایر بشه توکن من کی اکسپایر میشد
بعد از ۲ ثانیه پس اینجا
میام میگم کانست
سیگنال مساوی یه آبجکتی درست میکنم
مقدارشو میذارم فالس
اما اینجا میام یه ست تایموت میزنم
سیگنال اکسپایر مساوی ترو کی ترو میشه میشه بعد
از د میزن ۲ ثانیه
بعد از ۲ ثانیه این اکسپایر میشه بعدم این سیگنالو پاس میدم اینجا داخل این کالبکه
یعنی این داره میره کارشو انجام بده
کالبکه اینم تایمره داره میندازه ۲ ثانیه
که بشه کالبکه این میشه این سیگنال داخل
کالبک میشه ترو اکسپایرش میشه ترو خب حالا
اکسپایر ترو شد چیکار باید بکنیم ما باید
داخل کالبک چک بکنیم اگر اکسپایر ترو بود
یه دونه خطا برگردونه
اینجا قبل از این پرامیسه
میگم اگر
اون سیگنالی که به عنوان ورودی اومده
اکسپایرش
لاک اکسپایر
کنات
رات انی مور دیتا
این جلوش رو میگیره و در حقیقت مشکل ما حل میشه
خب حالا اینو چهجوری تست بکنیم بچهها؟ من توی لاک
یه پازی نوشته بودم میتونیم از این
استفاده کنیم. اینو بیایم اینجا کپی کنید
این بالا.
خب بعد الکی یه پاز مثلاً ۵ ثانیه بیاید
توی کار بندازید بیخود و بیجهت
اینجا
اویت
پاز مثلاً یه ۵ ثانیه بندازید.
خب بریم چک کنیم اینو.
خب یه دونه آیتم درست بکنیم.
خب میام اینجا مثلاً میزارم ۱۰ تا چون ۵ ثانیه طول میکشه باید خطا بده بعد از ۲
ثانیه
خطا داد پس داره کار میکنه خب اینو دیگه برمیدارم
پس اینجوری مشکل حل شد اما بچهها یه راه
حل دیگه هم برای درست کردن این وجود داره
از قابلیتهای پیشرفته جاوا اسکریپته
فقط اجازه بدینم ویدیومون چند دقیقه شده
خب بریم سراغ روش دوم تا همین ویدیو بگم
دیگه تموم کنیم ویدیو رو یه ترکیبی از
جاوا اسکریپت و تایپ اسکریپته خب یه مقدار
س یه حالت پیچیدگی داره خب بریم سراغ این
بیلد کلین پلاکسی اینو میخوایم درستش
بکنیم با همدیگه خب
روی ورودیش یه چیزی دریافت میکنه اسمشو
میذاریم تایم
اوت میلی سکند
نامبر
خب
همون کاری که الان ما نوشتیم اکسپایر میشد سیگنال میفرستاد دقیقا قراره همون کارو
بکنه کار خاصی انجام بده
خب گت
تارگت تو نقطه
کلاینتراپ
خب این کلاینت درست کنیم تایپ کلاینت تایپ کلاینتس
تایپ
کلاینت
خب خب این کلاینت همون کلاینت ردیسمونه
now زمان الان
بزرگتر مساویه
استارت تایم به اضافه تایم اوت میلی سکند شد
اونور ترو کن
یه
نیو ارور
و بگو که لاک
از اکسپایرد
حالا مثلاً میتونین د این همون دو ثانیه همون باشه اگه زمان الان به اضافه د ثانیه
الان از استارت تایم به اضافه د ثانیه
بزرگتر شد یعنی اکسپایر شده دیگه یه خطایی
رو جنریت کن خب تنها کاری که میگم این دار
انجام میده همینه
و
در نهایت چیکار میکنیم
پراپ و ریترن میکنم.
تایپ ولیو
اینجا هم در نهایتم ریترن میکنم نیم
داره رو میده هندلر هندلر درسته
خب میگه تارگتمون چرا
ودابا تارگت میفته ولیو
کلای بوده اشتباه چیزی بوده تب زدم این خودش درست بکنه خراب کرده خب حالا
این سمت
این سمت که نه همین جا کجا کالکمون داشته
را میشده اینجا
اینجا میگم کانست
پراکسی
خود بیلدو چرا نوشتم بیلدو نباید نوشتم سس اینو پاک
اینو باید برسیم این
تایم می سکند اینو بهش پاس بدیم
تا اوت میلی سکند بعد این پراکسی کلاینت رو هم علاوه بر سیگنال بهش به اینم پاس
میدن
که بره داخل
حالا
داخل ویتلاک من یه دونه
توی کالبکم
روش اینجا حالا اینجا علاوه بر این یه دونه ردیس
کلاینتم اضافه میکنم ردیس
کلاینت
دو نقطه تایپ کلاینت
اینم اضافه میکنم این خطای رفت حالا این مونده این چی میگه کنایت آها اوکی این
درست میکنم الان خب
بیایم تو این اینجا دیگه باز علاوه بر سیگنال ما یک چیز دیگه هم به عنوان ورودی
داریم دریافت میکنیم اسمشو میذارم لاکت
کلاینت
تایپ آف
کلاینت
عملاً من اون کلاینت اصلیو دادم یه کلاینت
جدید گرفتم کلاینتی که بعد از اون اکسپایر
تایمه لاک میشه
این کلاینته ویژگیش اینه که بعد از اون تایم ۲ ثانیه چی میشه لاک میشه و خطا میده
همین فقط تفاوتش همینه
خب اینم ارور اینم درست کنیم اینم بذاریم بالا باید تعریف کنیم این کجا اینجا
کاست
اینم تو ثانیه تعریفش میکنیم خب پس بعد از ۲ ثانیه این کلاینت جدید من
چی میشه لاک میشه و یه خطهایی رو جنریت
میکنه اجازه نمیده که دقیقاً کار جلو بره
حالا بریم اینو دوباره
تستش بکنیم
یه پاز من الکی دوباره اینجا بندازم
من اینجا دوباره یه دونه پاز بذارم اینجا فقط جهت تست
فقط تست کنیم ببینیم کار میکنه یا نه. این سیگنال رم بذارید چیز کنم. اینو
بردارم کامنتش کنم. میخوام ببینم این
جدیده کار میکنه یا نه. خب بیایم اینجا
رفرش بدم اینو
یه نیو آیتم درست کنیم.
۱ بعد خطا بده
خب این خطا رو داد حالا من این پازو بردارم باید همه چی عین
اولش کار کنم
بله داره کار میکنه خب اینم از این از کامنت
میتونید در بیارید میتونید درید با
خودتون. اینم راه دوم که یه ذره میگم راه
پیچیدهتری بود نسبت به راه اول و یه
ترکیبی از جاوا اسکریپت و در حقیقت تایپ
اسکریپت بود. خب این مبحثم بچهها تمام شد
و ما جلسه بعدی میریم سراغ مبحث جدیدمون
توی ردیس
و میخوایم راجع به کوی زدن با ردیس صحبت
بکنیم. یه چیزی به نام ردی سرچ جلسه بعدی
میبینمتون خداحافظ
پرسشهای رایج
پاسخ کوتاه و مستقیم به پرسشهایی که معمولاً هنگام یادگیری این موضوع مطرح میشوند.
اگر زمان اکسپایر توکن در 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 را بهصورت کاربردی و پروژهمحور یاد بگیرد.