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