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

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

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

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

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

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

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

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

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

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

https://github.com/ahmedsaoud31/phpCache

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

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

    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');