ردیس چیست؟ کاربرد Redis در کش، Session و محدودسازی نرخ درخواست

معرفی

«ردیس» (Redis)، پایگاه داده‌ای مخصوص برای نگهداری داده‌ها در حافظه اصلی است. این نرم‌افزار، داده‌ها را در RAM نگه می‌دارد تا خواندن و نوشتن آن‌ها با کم‌ترین تاخیر انجام شود. Redis فقط یک کش ساده نیست، بلکه از ساختارهای داده زیر پشتیبانی می‌کند:

  • «رشته» (String)

  • «هش» (Hash)

  • «لیست» (List)

  • «مجموعه» (Set)

  • «مجموعه مرتب» (Sorted Set)

  • «جریان» (Stream)

  • «داده‌های مکانی» (Geospatial)

توضیحات این ساختارها در مستندات رسمی انواع داده Redis قرار دارند.

تیم‌های بک‌اند از Redis برای موارد زیر استفاده می‌کنند:

  • کاهش فشار خواندن از پایگاه داده اصلی

  • نگهداری نشست کاربر یا همان «Session»

  • ذخیره کدهای یک‌بارمصرف

  • محدودسازی «نرخ درخواست» (Rate Limiting)

  • ذخیره‌سازی داده‌های موقتی

این ابزار در کنار پایگاه‌های داده رابطه‌ای مانند «PostgreSQL» یا «MySQL» قرار می‌گیرد و جایگزین مستقیم آن‌ها برای داده‌های اصلی و پایدار نیست.

پیش از استفاده از Redis چه تصمیم‌هایی بگیرید

پیش از به کارگیری Redis، گام‌های زیر را دنبال کنید:

  • منبع اصلی داده را مشخص کنید: برای هر کلید، منبع اصلی را تعیین کنید. برای نمونه PostgreSQL منبع اصلی اطلاعات باشد و Redis فقط نسخه کش‌شده را نگه دارد.

  • استراتژی انقضای داده را تنظیم کنید: زمان انقضا (TTL) را تعیین کنید و روش نامعتبرسازی کش پس از تغییر داده اصلی را مشخص سازید.

  • رفتار برنامه هنگام قطعی را طراحی کنید: مشخص کنید که در صورت دسترس‌نبودن Redis، سامانه درخواست‌ها را رد کند یا اجازه عبور بدهد.

  • مدیریت حافظه را پیکربندی کنید: سقف حافظه و سیاست‌های حذف داده (Eviction) را پیش از بهره‌برداری تنظیم کنید. جزئیات در بخش مدیریت حافظه و eviction آمده است.

  • پایش مداوم شاخص‌ها را اجرا کنید: نرخ اصابت کش، تاخیر خواندن و نوشتن، مصرف حافظه و تعداد Eviction را همیشه بررسی کنید.

  • سناریوی بازیابی از خرابی را بیازمایید: قابلیت‌های ماندگاری، «تکثیر» (Replication) و «خوشه‌بندی» (Redis Cluster) را پیاده‌سازی کنید. توضیحات در مستندات ماندگاری، تکثیر و مقیاس‌پذیری و خوشه قرار دارند.

  • مجوزهای حقوقی نسخه را بررسی کنید: شرایط مجوز نسخه مورد نظر خود را در صفحه رسمی مجوزهای Redis ارزیابی کنید.

ویژگی‌های کلیدی

برای آشنایی بهتر با این ابزار، توجه به موارد زیر می‌تواند مفید باشد.

  • ذخیره‌سازی در حافظه

    داده‌ها در RAM نگهداری می‌شوند. بنابراین Redis برای عملیات پرتکرار و حساس به تاخیر، مانند خواندن کش، مناسب است.

  • انقضای خودکار کلیدها

    می‌توان برای هر کلید زمان انقضا تعیین کرد. این قابلیت برای کدهای تایید، سشن کاربر، توکن موقت و پاسخ‌های کش شده کاربرد دارد. جزئیات در مستندات رسمی expiration توضیح داده شده است: redis.io

  • ساختارهای داده متنوع

    علاوه بر مقدارهای ساده، از هش، فهرست، مجموعه، مجموعه مرتب، جریان و ساختارهای داده مکانی پشتیبانی می‌کند. مستندات: redis.io

  • عملیات اتمی

    عملیات اتمی، عملیاتی است که به صورت یک واحد کامل انجام می‌شود. یعنی یا تمام آن با موفقیت انجام می‌شود یا هیچ بخشی از تغییرات آن اعمال نمی‌شود. عملیاتی مانند افزایش شمارنده می‌توانند اتمی اجرا شوند. این ویژگی برای شمارنده‌ها و محدودسازی نرخ درخواست مفید است. برای منطق چندمرحله‌ای باید اتمی‌بودن کل فرایند را با تراکنش یا اسکریپت ارزیابی کنید.

  • ماندگاری اختیاری داده

    Redis می‌تواند با تصویر لحظه‌ای یا ثبت عملیات، داده را روی دیسک نیز نگه دارد. اما تنظیمات ماندگاری جایگزین طراحی بازیابی برای داده‌های حیاتی نیست. مستندات: redis.io

  • تکثیر و خوشه‌بندی

    برای افزایش دسترس‌پذیری و توزیع داده می‌توان از تکثیر و خوشه Redis استفاده کرد. این قابلیت‌ها در سامانه‌های پرترافیک اهمیت بیشتری دارند. مستندات: redis.io

کاربردها

در ادامه، مهم‌ترین موارد این بخش به تفکیک معرفی شده‌اند.

  • کش پاسخ و داده‌های پرتکرار

    نتیجه کوئری‌های پرهزینه، اطلاعات محصول یا خروجی API را برای مدت محدودی در کش ذخیره کنید تا تعداد درخواست‌ها به پایگاه داده اصلی کاهش یابد. از ابتدا مشخص کنید که منبع اصلی داده کدام است، TTL چقدر باشد و پس از تغییر داده‌ها، کش چگونه حذف یا به‌روزرسانی شود.

  • نگهداری نشست کاربر

    وضعیت نشست کاربران را خارج از حافظه فرایند برنامه ذخیره کنید تا چند نمونه از سرویس بتوانند اطلاعات ورود یک کاربر را بخوانند. مدت اعتبار نشست (TTL) را نیز با سیاست خروج از حساب کاربری و زمان اعتبار نشست هماهنگ کنید.

  • محدودسازی نرخ درخواست

    شمارنده همراه با TTL، محدودسازی نرخ درخواست‌ها را بر اساس پنجره ثابت انجام می‌دهد. این روش شاید در مرز دو بازه، باعث ایجاد جهش ناگهانی در تعداد درخواست‌ها شود. برای کنترل دقیق‌تر، روش‌هایی مانند Sliding Window یا Token Bucket را بررسی کنید. همچنین، عملیات خواندن و به‌روزرسانی شمارنده را به صورت اتمی اجرا کنید. در زمان اختلال Redis نیز مشخص کنید که درخواست‌ها رد شوند یا اجازه عبور داشته باشند.

  • داده‌های کوتاه‌عمر

    کد تایید شماره موبایل، لینک بازیابی رمز عبور، قفل موقت عملیات و توکن‌های کوتاه‌مدت را با زمان انقضای مشخص ذخیره کنید. این داده‌ها نباید تنها نسخه اطلاعاتی باشند که بازیابی آن ضروری است.

  • صف و پردازش پس‌زمینه

    صف ساده Redis برای انجام کارهای قابل تکرار و کم‌حساسیت، مانند تولید تصویر بندانگشتی، مناسب است. برای اطمینان از تحویل قابل اعتماد پیام‌ها، قابلیت‌هایی مانند تلاش مجدد (Retry)، پشتیبانی از چند مصرف‌کننده، حفظ ترتیب پیام‌ها و کنترل گم‌شدن یا تکرار، پیام‌ها را بررسی کنید. برای این نیازها، استفاده از Redis Stream یا ابزار تخصصی پیام‌رسانی را جداگانه ارزیابی کنید.

  • شمارنده و رتبه‌بندی

    شمارش بازدید، تعداد واکنش‌ها یا ساخت جدول رتبه‌بندی را با شمارنده‌ها و مجموعه‌های مرتب انجام دهید. در رتبه‌بندی‌های حساس، نحوه بازسازی داده از منبع اصلی را نیز مشخص کنید.

پرسش‌های رایج درباره ردیس

در این بخش، به تعدادی از پرسش‌های رایج درباره این ابزار پاسخ داده شده است.

آیا Redis جایگزین PostgreSQL یا MySQL است؟

خیر، این ابزار ذخیره‌ساز متکی بر حافظه است و در کنار پایگاه‌های داده رابطه‌ای برای افزایش سرعت خواندن داده‌ها قرار می‌گیرد.

چه زمانی استفاده از Redis برای کش منطقی است؟

وقتی یک داده یا نتیجه محاسبه بارها خوانده می‌شود، تولید آن هزینه‌بر است و قدیمی شدن کوتاه‌مدت آن قابل‌قبول است. پیش از افزودن کش، منبع اصلی داده، TTL، روش نامعتبرسازی پس از تغییر داده و رفتار برنامه را هنگام اختلال Redis، مشخص کنید.

آیا داده‌های Redis پس از راه‌اندازی مجدد باقی می‌مانند؟

بسته به پیکربندی ممکن است باقی بمانند. Redis از تصویر لحظه‌ای و ثبت عملیات برای ماندگاری پشتیبانی می‌کند، اما نباید بدون بررسی تنظیمات، سناریوی خرابی و آزمون بازیابی، آن را محل یگانه نگهداری داده‌های حیاتی فرض کرد. مستندات: redis.io

برای محدودسازی نرخ درخواست، Redis چه مزیتی دارد؟

ساختارهای داده‌ای مانند Sorted Set و اجرای سریع دستورات اتمی، پیاده‌سازی الگوریتم‌های محدودسازی را بسیار ساده و پرسرعت می‌سازند.

تفاوت Redis و Memcached چیست؟

هر دو ابزار برای کش‌کردن داده‌ها در حافظه و تعیین زمان انقضای آیتم‌ها کاربرد دارند. Memcached عمدتا برای کش ساده با ساختار کلید و مقدار طراحی شده است و قابلیت‌های داخلی برای ماندگاری داده‌ها، تکثیر داده‌ها و پیام‌رسانی ندارد. Redis ساختارهای داده متنوع، امکان ماندگاری اختیاری داده‌ها و قابلیت «انتشار و اشتراک» (Pub/Sub) را ارائه می‌دهد. انتخاب بین این دو ابزار به نیاز شما برای ساختار داده، بازیابی اطلاعات پس از خرابی و الگوی پیام‌رسانی بستگی دارد.

چه شاخص‌هایی را پس از راه‌اندازی Redis پایش کنم؟

حداقل نرخ اصابت کش، تاخیر عملیات، مصرف حافظه، تعداد eviction و خطاهای اتصال را بررسی کنید. افزایش eviction یا کاهش نرخ اصابت کش نشان می‌دهد TTL، سیاست حذف داده یا ظرفیت حافظه نیاز به بازبینی دارد.

آموزش‌های مرتبط در فرادرس

منابع پیشنهادی

برچسب‌ها و کلیدواژه‌ها