از Pista Academy حمایت کنید
خلاصه آموزشی
مرور سریع مفاهیم اصلی پیش از تماشای کامل یا برای جمعبندی بعد از آموزش.
در جلسه 23 آموزش Redis از صفر تا حرفهای، مدرس به دیتا تایپی به نام هایپر لاگ در 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 را بهصورت کاربردی و پروژهمحور یاد بگیرد.