I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

أفضل استراتيجيات الـ Caching في Laravel لتسريع التطبيق

يا هلا بيك يا باشمهندس في عالم البرمجة! أكيد في يوم من الأيام وأنت شغال على مشروع لارافيل (Laravel)، جيت تفتح صفحة معينة ولاحظت إنها بتغيب شوية عشان تحمل. دخلت

أفضل استراتيجيات الـ Caching في Laravel لتسريع التطبيق
Reading Count: 3

يا هلا بيك يا باشمهندس في عالم البرمجة! أكيد في يوم من الأيام وأنت شغال على مشروع لارافيل (Laravel)، جيت تفتح صفحة معينة ولاحظت إنها بتغيب شوية عشان تحمل. دخلت تبص في الـ Database لقيت استعلامات معقدة (Database Queries) بتاخد وقت طويل، والـ Server بيكح، والمستخدم طهقان وعايز يقفل الموقع! الوجع ده كلنا مرنا بيه، وهنا بيجي دور البطل الخارق بتاعنا النهاردة: التخزين المؤقت أو التخزين المؤقت للبيانات (Caching)، وبالتحديد لما نربطه مع الأداة الرهيبة ريديس (Redis).

في المقال ده، هنتكلم بالتفصيل عن أفضل استراتيجيات الـ Caching في لارافيل (Laravel Caching Strategies)، وإزاي نستخدم Redis عشان ننزل بوقت الاستجابة (Response Time) للميلي ثانية، ونخلي التطبيق بتاعنا طيارة.

ليه أصلاً محتاجين Caching في مشاريع لارافيل؟

تخيل معايا إن عندك متجر إلكتروني، وكل ما يوزر يفتح الصفحة الرئيسية، السيرفر بيروح يسأل قاعدة البيانات (Database) عن المنتجات المميزة، والأقسام، والتقييمات، ودي عمليات بتستهلك وقت وموارد رهيبة (CPU & RAM). طيب ليه نعيد الشغل ده مية مرة في الثانية طالما البيانات دي مش بتتغير كل ثانية؟

هنا فكرة الـ Caching ببساطة: بنحفظ النتيجة دي في مكان سريع جداً في الذاكرة، ولما يوزر تاني يطلب نفس الصفحة، بنديه البيانات دي في أجزاء من الميلي ثانية من غير ما نعدي على قاعدة البيانات أساساً. لارافيل بيوفر نظام Caching مرن جداً، ولما بنربطه بـ Redis اللي بيشتغل كله في الذاكرة العشوائية (In-memory Data Store)، الأداء بيفرق بطريقة تحسها سحر!

إعداد Redis مع لارافيل

عشان نبدأ نطبق صح، لازم الأول نربط لارافيل بـ Redis. الخطوات سهلة ومش معقدة:

  • الخطوة الأولى: تثبيت حزمة ريديس (Redis PHP Extension) على السيرفر بتاعك لو مش متثبتة.
  • الخطوة التانية: في ملف الـ .env بتاع المشروع، هتمسح التخزين المؤقت الافتراضي وتخليه يستخدم ريديس بالشكل ده:
    CACHE_DRIVER=redis
    REDIS_HOST=127.0.0.1
    REDIS_PASSWORD=null
    REDIS_PORT=6379
  • الخطوة التالتة: التأكد من تثبيت حزمة predis/predis أو استخدام مكتبة phpredis عن طريق Composer لو احتجت.

استراتيجية تخزين استعلامات قاعدة البيانات (Database Query Caching)

أكتر حاجة بتبطئ التطبيق هي الـ Heavy Queries. عشان نعمل كاش للاستعلامات دي باستخدام لارافيل وRedis، نقدر نستخدم الـ Cache Facade بكل سهولة. تعالى نشوف مثال عملي:


use Illuminate\Support\Facades\Cache;
use App\Models\Product;

$products = Cache::remember('featured_products', 3600, function () {
    return Product::where('is_featured', 1)->with('category')->get();
});

الكود ده معناه: يا لارافيل دور في الكاش عن مفتاح اسمه featured_products، لو لقيته ومخلصش خلال ساعة (3600 ثانية)، هات البيانات منه فوراً. لو مش موجود أو انتهت صلاحيته، روح لقاعدة البيانات هات المنتجات، واحفظها في الكاش بالساعة دي، وبعدين رجعها للمستخدم. البساطة دي بتوفر على الـ Database ضغط مهول!

تخزين الـ Views والـ Fragments لتسريع الواجهات

مش بس البيانات اللي ممكن نعملها كاش، دي كمان الواجهات (Views) والـ HTML الناتج. لو عندك جزء في الصفحة الرئيسية مش بيتغير كتير، زي القائمة الجانبية (Sidebar) أو الفوتر (Footer)، تقدر تستخدم الـ View Caching:


@cache('sidebar-menu', 60)
    <div class="sidebar">
        <-- كود القائمة الثقيلة هنا -->
    </div>
&commat;endcache

الطريقة دي بتخزن الـ HTML النهائي الناتج في الكاش، وفي كل مرة الصفحة بتتعرض، لارافيل بيطبع الـ HTML المخزن ده على طول من غير ما يقعد يعمل Render للـ Blade Components من جديد.

إدارة صلاحيات الكاش ومسحه (Cache Invalidation)

من أصدق المقولات البرمجية: "أصعب حاجة في الـ Caching هي تسمية المتاهات ومسح الكاش في الوقت المناسب" (Cache Invalidation). لو اليوزر عدل منتج، لازم الكاش القديم يتقفل ويتحدث.

عشان نعمل كده بطريقة احترافية، بنستخدم الـ Model Observers أو الـ Events، وأول ما يحصل تحديث، بنمسح الكاش القديم:


use Illuminate\Support\Facades\Cache;

public function updated(Product $product)
{
    Cache::forget('featured_products');
}

بالطريقة دي نضمن إن التطبيق دايماً بيعرض أحدث بيانات، وفي نفس الوقت مستفيد بأقصى سرعة ممكنة من الـ Redis.

نصيحة من أخ لتطوير مهاراتك

يا صديقي، الـ Caching مش مجرد أداة سحرية بنرميها في أي حتة وخلاص؛ الاستخدام الخاطئ ليها ممكن يعرضك لمشاكل كبيرة زي ظهور بيانات قديمة للمستخدمين (Stale Data). دايماً ابدأ حل المشاكل البطيئة بالـ Database Indexing الصح الأول، وبعدين استخدم الـ Redis Caching كطبقة تسريع إضافية (Performance Booster). جرب بايدك واشتغل على مشاريع حقيقية، وكل سطر كود هتكتبه هيخليك مهندس برمجيات أشطر وأفهم بكتير.


Share

Related posts

Aug 19, 2026 • 1 min read
Reading Count: 2
شرح Laravel Folio و Volt: العودة للتبسيط في بناء الصفحات

شرح Laravel Folio و Volt: العودة للتبسيط في بناء الصفحات أهلاً بيك يا صديقي المبرمج في عالم تطوير ال...

Aug 18, 2026 • 1 min read
Reading Count: 3
توحيد شكل الكود في فريقك باستخدام Laravel Pint

تخيل معايا السيناريو ده: قاعد الصبح رايق بتشرب كوباية القهوة، وفتحت الـ GitHub عشان تعمل مراجعة كود...

Aug 18, 2026 • 1 min read
Reading Count: 5
إزاي تستخدم View Composers لمشاركة البيانات بين صفحات Laravel

يا هلا بيك يا صديقي المبرمج في مقال جديد من سلسلة احتراف تطوير الويب (Web Development). تعال نتكلم ا...