مقاله

راهکارهای عملی برای کاهش زمان پاسخ‌دهی API و صفحات لیستی با Eloquent، Redis و استراتژی‌های کش.

بهینه‌سازی کوئری‌ها و کش در Laravel

بهینه‌سازی کوئری‌ها و کش در Laravel

کندی اپلیکیشن اغلب از دیتابیس شروع می‌شود، نه از فرانت‌اند. در این یادداشت روش‌هایی را که در پروژه‌های پرترافیک استفاده کرده‌ام خلاصه می‌کنم.

تشخیص گلوگاه

قبل از بهینه‌سازی، اندازه بگیرید. Laravel Debugbar، Telescope و لاگ کوئری‌های کند (slow_query_log در MySQL) ابزارهای اولیه هستند.

ایندکس‌گذاری

ستون‌هایی که در WHERE، ORDER BY و JOIN زیاد استفاده می‌شوند باید ایندکس composite مناسب داشته باشند — مثلاً (status, published_at) برای پست‌های منتشرشده.

کش نتیجه Query

برای داده‌هایی که هر چند دقیقه یک‌بار عوض می‌شوند، Cache::remember() با TTL مشخص کافی است. بعد از هر به‌روزرسانی در پنل ادمین، کلید کش را فراموش کنید.

return Cache::remember('categories.active', 3600, function () {
    return Category::query()->where('is_active', true)->orderBy('sort_order')->get();
});

Redis به‌عنوان درایور کش

در محیط production، Redis هم برای کش و هم برای صف پایدارتر از درایور file است و در مقیاس افقی بهتر عمل می‌کند.

نتیجه

بهینه‌سازی بدون اندازه‌گیری حدس است. یک کوئری کم‌هزینه و یک کلید کش درست، گاهی از refactor بزرگ مؤثرتر است.