افزایش عملکرد و کاهش بار سرور با بهینهسازی کش در لاراول
با کش در لاراول سرعت سایت خود را چند برابر کنید! در این مقاله، بهترین روشهای کش کردن دادهها و Viewها در Laravel را بررسی میکنیم تا عملکرد سایت شما بهینه شود.


لیست مطالب
در توسعهی برنامههای تحت وب، یکی از مهمترین چالشها، بهینهسازی عملکرد و کاهش زمان پاسخگویی است. یکی از موثرترین راهحلها برای این مسئله، کش کردن دادهها و Viewها است. در فریمورک لاراول (Laravel)، کش (Caching) بهعنوان یک قابلیت کلیدی برای ذخیرهی موقت نتایج محاسبات، درخواستهای پایگاه داده، و پردازشهای سنگین استفاده میشود. در این مقاله، روشهای بهینهی کش کردن دادهها و Viewها را در لاراول بررسی کرده و نکاتی برای بهبود عملکرد ارائه میدهیم.
۱. کش چیست و چرا اهمیت دارد؟
کش (Cache) فرآیندی است که در آن دادههای پرمصرف در یک محل ذخیرهی سریعتر (مانند حافظهی رم یا پایگاه دادههای سریع مانند Redis) نگهداری میشوند تا در درخواستهای بعدی نیازی به محاسبه یا بازیابی مجدد آنها نباشد.
مزایای کش کردن در لاراول
- کاهش زمان پاسخگویی سرور (Response Time)
- کاهش بار روی پایگاه داده
- افزایش مقیاسپذیری و بهبود تجربهی کاربری
- کاهش هزینههای پردازشی و بهینهسازی منابع سرور
۲. معرفی انواع کش در لاراول
لاراول از چندین روش برای ذخیرهسازی دادههای کش پشتیبانی میکند. این روشها را میتوان در فایل پیکربندی config/cache.php
مدیریت کرد.
۲.۱ درایورهای پشتیبانیشده توسط لاراول
در لاراول، میتوان از چندین درایور مختلف برای ذخیرهی کش استفاده کرد:
درایور | توضیحات |
---|---|
file |
ذخیرهی کش در فایلهای لوکال |
database |
ذخیرهی کش در پایگاه داده (MySQL, PostgreSQL) |
redis |
استفاده از Redis برای کش سریع |
memcached |
ذخیرهسازی در حافظهی رم با Memcached |
array |
نگهداری کش در حافظهی موقتی (فقط در زمان اجرا) |
۲.۲ تغییر درایور کش
برای انتخاب درایور مناسب، مقدار CACHE_DRIVER
را در .env
تنظیم کنید:
CACHE_DRIVER=redis
پیشنهاد: برای پروژههای بزرگ، استفاده از Redis یا Memcached بهترین گزینه است، زیرا این دو تکنولوژی عملکرد بالاتری نسبت به file
یا database
دارند.
۳. کش کردن دادهها در لاراول
لاراول متدهای مختلفی برای مدیریت کش دادهها ارائه میدهد. در ادامه، روشهای بهینه برای ذخیرهسازی و بازیابی دادههای کششده بررسی میشود.
۳.۱ ذخیرهسازی داده در کش
برای ذخیرهی یک مقدار در کش، میتوان از متد Cache::put()
استفاده کرد:
use Illuminate\Support\Facades\Cache;
Cache::put('key_name', 'cached_value', now()->addMinutes(10));
- مقدار
'cached_value'
به مدت10
دقیقه در کش باقی میماند.
۳.۲ بازیابی مقدار از کش
برای دریافت مقدار کششده، از متد Cache::get()
استفاده کنید:
$value = Cache::get('key_name');
در صورتی که مقدار موردنظر در کش نباشد، مقدار null
برگردانده میشود.
۳.۳ استفاده از remember()
برای ذخیره و دریافت داده
به جای بررسی دستی کش و ذخیرهی مقدار در صورت عدم وجود، میتوان از remember()
استفاده کرد:
$posts = Cache::remember('posts_list', now()->addMinutes(15), function () {
return \App\Models\Post::latest()->get();
});
- اگر مقدار
posts_list
در کش موجود باشد، مستقیماً بازیابی میشود. - در غیر این صورت، مقدار جدید تولید و در کش ذخیره میشود.
۳.۴ حذف کش
در برخی موارد، نیاز است کش را حذف کنیم. برای این کار، از متد Cache::forget()
استفاده کنید:
Cache::forget('posts_list');
همچنین میتوان تمام کشهای ذخیرهشده را با متد flush()
پاک کرد:
Cache::flush();
توجه: استفاده از flush()
تمامی کشها را پاک میکند، که ممکن است باعث افزایش بار روی سرور شود.
۴. کش کردن Viewها در لاراول
گاهی اوقات، پردازش برخی از قسمتهای View سنگین است. در این موارد، استفاده از @cache
در Blade میتواند مفید باشد.
۴.۱ کش کردن بخشهای خاصی از View
@cache('homepage-popular-posts', now()->addMinutes(30))
<ul>
@foreach($posts as $post)
<li>{{ $post->title }}</li>
@endforeach
</ul>
@endcache
- این دستور بخش مشخصشده را به مدت ۳۰ دقیقه در کش ذخیره میکند.
۴.۲ حذف کش View
اگر اطلاعات نمایش دادهشده در View تغییر کند، میتوان کش را حذف کرد:
Cache::forget('homepage-popular-posts');
۵. بهینهسازی و تکنیکهای پیشرفتهی کش
برای داشتن عملکرد بهینهتر، چندین تکنیک پیشرفته وجود دارد:
۵.۱ استفاده از Cache Tags برای گروهبندی کشها
در صورتی که نیاز به حذف گروهی کشها دارید، میتوانید از Cache Tags استفاده کنید. (این ویژگی فقط در Redis
و Memcached
موجود است.)
Cache::tags(['users', 'profiles'])->remember('user_123_profile', 600, function () {
return \App\Models\User::find(123)->profile;
});
برای حذف کشهای یک دسته خاص:
Cache::tags(['users'])->flush();
۵.۲ زمانبندی پاکسازی کش با Schedule
در app/Console/Kernel.php
میتوانید حذف کشهای قدیمی را زمانبندی کنید:
protected function schedule(Schedule $schedule)
{
$schedule->command('cache:clear')->dailyAt('02:00');
}
این دستور، کش را هر شب در ساعت ۲ بامداد پاکسازی میکند.
۵.۳ استفاده از Cache Busting
برای اطمینان از بهروزرسانی دادهها پس از تغییرات مهم، میتوان از کلیدهای داینامیک استفاده کرد:
$key = 'user_' . auth()->id() . '_dashboard_' . now()->format('Ymd');
$data = Cache::remember($key, now()->addHours(6), function () {
return expensiveQuery();
});
با این روش، کلید کش بهصورت روزانه تغییر میکند و دادههای قدیمی را بهطور خودکار تازهسازی میکند.
استفادهی صحیح از کش در لاراول میتواند به کاهش بار سرور، افزایش سرعت پاسخگویی، و بهبود تجربهی کاربری کمک کند. در این مقاله، روشهای مختلف کش کردن دادهها و Viewها را بررسی کردیم:
✅ استفاده از Cache::remember()
برای کش کردن دادههای پردازشی سنگین
✅ کش کردن Viewها با @cache
در Blade
✅ مدیریت کش با Redis و Memcached برای بهترین عملکرد
✅ پاکسازی و بهینهسازی کش با تکنیکهای پیشرفته مانند Cache Tags و Cache Busting
اگر پروژهی شما نیاز به سرعت بالا و بارگذاری بهینه دارد، حتماً از روشهای کش پیشرفته استفاده کنید تا عملکرد سیستم به حداکثر برسد. 🚀
دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)