28

التخزين المؤقت Cache لتقليل الضغط على الخادم

السلام عليكم ورحمة الله وبركاته

توجد عدة طرق للتخزين المؤقت تستخدم على حسب الحاجة كالتخزين المؤقت في الملفات أو ذاكرة الوصول العشوائي RAM فإن كنت من مستخدمي PHP فيمكنك التخزين داخل الـRAM الخاصة بالخادم عبر أحد المكتبات كـ Memcached في حالات الضغط الكبير على الخادم.

  • هناك عدة أشكال للحفظ المؤقت لمحتوى الموقع ومنها حفظ الصفحات بشكلها النهائي كملفات HTML والوصول المباشر لها كأنه موقع ثابت static وهي الأسرع، أو تخزين محتوي الإستعلامات كمصفوفات أو كائنات أو غيرها بشكلها المستخدم داخل الكود لإعادة إستخدامها بسرعة وسهولة.

  • سنتحدث اليوم عن الشكل الثاني وقبل هذا سنسرد فكرة التخزين المؤقت وطريقة عمله بشكل عام:

1- جلب المحتوى من قاعدة البيانات وعمل تخزين مؤقت لهذه البيانات بأي من الطرق التي تريدها.

2- محاولة الوصول لصفحات الموقع عبر المتصفح، سيتم التحقق من وجود بيانات مؤقته تم تخزينها لعرضها أو جلب المحتوى من قاعدة البيانات، في حالة وجدوها سيتم إستخدام البيانات المخزنة مؤقتاً وإن لم يتم إيجادها يتم تنفيذ الخطوة رقم 1.

3- في حال تم التعديل/الحذف/الإضافة على قاعدة البيانات يتم حذف البيانات المخزنة مؤقتاً والخاصة والمتأثرة بهذا التغيير وإعادة تنفيذ الخطوة رقم 1.

  • إذاً بتطبيق مبدأ الـ Cache فأنت لست بحاجة لإعادة تنفيذ الإستعلام على قاعدة البيانات في كل مرة طالما البيانات لم تتغير، مما سيوفر ضغط كبير على الخادم.

  • يمكن إستخدام الملفات لهذا الغرض في حالة الإستعلامات المعقدة أو الإستعلامات عموماً.

  • كتبت فئة بسيطة للتعامل مع الملفات لعمل حفظ مؤقت أو دائم للبيانات لسهولة تنفيذ فكرة عمل الـCache ستجدها على الرباط التالي:

كيفية الإستخدام

قم بتضمين الفئة

    include('Cache.php');

لحفظ البيانات إستخدم الدالة set الوسيط الأول عبارة عن الاسم والوسيط الثاني هو للقيمة والثالث إختياري للوقت

    Cache::set('age', 35);
    Cache::set('data', ['id'=>100, 'name'=>'ahmed','email'=>'ahmedsaoud31@gmail.com']);

لجلب البيانات المحفوظة مسبقاً إستخدم الدالة get

    $age = Cache::get('age');
    $data = Cache::get('data');

لحفظ البيانات لوقت محدد يمكنك إستخدام الدالة set مع وضع الزمن المراد حذف البيانات بعده كوسيط ثالث للدالة بالدقائق

المثال التالي لحفظ البيانات لمدة يوم واحد

    Cache::set('age', 100, 24*60);
    $data = ['id'=>100, 'name'=>'ahmed','email'=>'ahmedsaoud31@gmail.com'];
    Cache::set('data', $data, 24*60);

يمكنك تخزين بيانات مختلفة كـ سلاسل نصية، مصفوفات، قيم منطقية، أرقام وكائنات

    $obj = new stdClass();
    $obj->id = 200;
    $obj->name = 'Ahmed';
    $obj->email = 'ahmedsaoud31@gmail.com';
    Cache::set('obj', $obj);
    Cache::set('sign', true);
    Cache::set('num', 2015);
    Cache::set('arr', [1,2,3,4]);
    Cache::set('str', 'ahmed');

لحفظ البيانات للأبد، إترك الوسيط الثالث الخاص بالوقت للدالة set فارغاً

    Cache::set('name', 'ahmed');

لحذف قيمة مخزنة إستخدم الدالة delete

    Cache::delete('data');

لحذف مجموعة قيم دفعة واحدة قم بتمرير اسماء القيم داخل مصفوفة كوسيط لنفس الدالة delete

    Cache::delete(['data','age','obj']);

إذا أردت حذف جميع البيانات المخزنة يمكنك إستخدام نفس الدالة delete بدون أي وسائط

    Cache::delete();

إذا أردت التحقق من وجود قيمة مخزنة مسبقاً أم لا إستخدم الدالة has

    if(Cache::has('age'))
        echo Cache::get('age');
يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

أُحييك اخي ، من النادر ان تجد من العرب من يبني مكتبات و يقوم بعملها مفتوحة المصدر

شكراً لك، يوجد محتوى لا بأس به ولكن مع مقارنته بالمحتوى المقدم من الجهات الأخرى نكون في مصاف متأخره.

جزاك الله خيرا

لقد ذكرت ان افضل طريقة هي حفظ ملف html ليصبح الموقع كأنه static لكن ارى انك اعتمدت حفظ المتغيرات في ملف لتعيد طلبهم من الملف كان من الممكن حفظ الصفحة ك html باستعمال ال output buffering أليس افضل؟

  • لم أقل أنها الأفضل ولكن ذكرت أنها الأسرع، ليست أفضل دوماً، بالإضافة لأني قصدت بالشرح الطريقة الثانية ولهذا كان الكود يخدم تلك الطريقة.
-3

الكود الي مكتوب ده مش مكتبه ولا حاجه لكن اصلا موجود في اللارافيل وعلى فكرة سريع جدا وقوي جدا استخدمه في احد المشاريع عشان اقلل الكويريز من الداتا بيز في الصفحة الرئيسية

  • هل إطلعت على الكود؟ لا يعني بالضرورة تشابه طريقة الإستخدام أن الكود مستنسخ.