Rememberable هي سمة بليغة لـ Laravel تضيف طرق استعلام remember()
. وهذا يجعل من السهل جدًا تخزين نتائج الاستعلام مؤقتًا لفترة زمنية قابلة للتعديل.
// Get a the first user's posts and remember them for a day.
User:: first ()-> remember ( now ()-> addDay ())-> posts ()-> get ();
// You can also pass the number of seconds if you like (before Laravel 5.8 this will be interpreted as minutes).
User:: first ()-> remember ( 60 * 60 * 24 )-> posts ()-> get ();
إنه يعمل ببساطة عن طريق تذكر استعلام SQL الذي تم استخدامه وتخزين النتيجة. إذا تمت محاولة نفس الاستعلام أثناء استمرار ذاكرة التخزين المؤقت، فسيتم استرداده من المتجر بدلاً من ضرب قاعدة البيانات الخاصة بك مرة أخرى.
قم بالتثبيت باستخدام Composer، تمامًا كما تفعل مع أي شيء آخر.
composer require watson/rememberable
أسهل طريقة للبدء مع Eloquent هي إنشاء AppModel
مجرد يمكنك من خلاله توسيع نماذج التطبيق الخاصة بك. في هذا النموذج الأساسي، يمكنك استيراد السمة التي يمكن تذكرها والتي ستعمل على توسيع وظيفة التخزين المؤقت نفسها لتشمل أي استعلامات تقوم بإنشائها من النموذج الخاص بك.
<?php
namespace App ;
use Watson Rememberable Rememberable ;
use Illuminate Database Eloquent Model as Eloquent ;
abstract class Model extends Eloquent
{
use Rememberable;
}
الآن، تأكد فقط من أن نماذج تطبيقك من AppModel
الجديد بدلاً من Eloquent.
<?php
namespace App ;
class Post extends Model
{
//
}
وبدلاً من ذلك، يمكنك ببساطة تطبيق السمة على كل نموذج ترغب في استخدام remember()
عليه.
يعد استخدام طريقة التذكر أمرًا بسيطًا للغاية. ما عليك سوى تمرير عدد الثواني التي تريد تخزين نتيجة هذا الاستعلام في ذاكرة التخزين المؤقت لها، وكلما تم استدعاء نفس الاستعلام خلال هذا الإطار الزمني، سيتم سحب النتيجة من ذاكرة التخزين المؤقت، بدلاً من قاعدة البيانات مرة أخرى.
// Remember the number of users for an hour.
$ users = User:: remember ( 60 * 60 )-> count ();
إذا كنت تريد وضع علامة على استعلامات معينة، يمكنك إضافة cacheTags('tag_name')
إلى استعلامك. يرجى ملاحظة أن علامات ذاكرة التخزين المؤقت غير مدعومة من قبل جميع برامج تشغيل ذاكرة التخزين المؤقت.
// Remember the number of users for an hour and tag it with 'user_queries'
User:: remember ( 60 * 60 )-> cacheTags ( ' user_queries ' )-> count ();
إذا كنت تريد إضافة بادئة فريدة إلى مفتاح ذاكرة التخزين المؤقت لكل استعلام من استعلاماتك (على سبيل المثال، إذا كانت ذاكرة التخزين المؤقت الخاصة بك لا تدعم وضع العلامات)، فيمكنك إضافة prefix('prefix')
إلى استعلامك.
// Remember the number of users for an hour and prefix the key with 'users'
User:: remember ( 60 * 60 )-> prefix ( ' users ' )-> count ();
وبدلاً من ذلك، يمكنك إضافة الخاصية $rememberCachePrefix
إلى النموذج الخاص بك لاستخدام بادئة ذاكرة التخزين المؤقت هذه دائمًا.
إذا كنت تريد استخدام برنامج تشغيل ذاكرة تخزين مؤقت مخصص (محدد في config/cache.php)، فيمكنك إضافة cacheDriver('cacheDriver')
إلى استعلامك.
// Remember the number of users for an hour using redis as cache driver
User:: remember ( 60 * 60 )-> cacheDriver ( ' redis ' )-> count ();
وبدلاً من ذلك، يمكنك إضافة خاصية $rememberCacheDriver
إلى النموذج الخاص بك لاستخدام برنامج تشغيل ذاكرة التخزين المؤقت هذا دائمًا.
يمكنك تعيين علامة ذاكرة تخزين مؤقت لجميع استعلامات النموذج عن طريق تعيين الخاصية $rememberCacheTag
بسلسلة فريدة يجب استخدامها لتمييز الاستعلامات.
التحقق من صحة الأعمال عن طريق تخزين الاستعلامات مؤقتًا على أساس استعلام تلو الآخر. وهذا يعني أنه عند إجراء التحميل المتلهف، لن يتم تخزين هذه الاستعلامات الإضافية مؤقتًا أيضًا ما لم يتم تحديدها بشكل صريح. يمكنك القيام بذلك عن طريق استخدام رد اتصال مع الأحمال المتحمسة لديك.
$ users = User:: where ( " id " , " > " , " 1 " )
-> with ([ ' posts ' => function ( $ q ) { $ q -> remember ( 60 * 60 ); }])
-> remember ( 60 * 60 )
-> take ( 5 )
-> get ();
يمكنك الاشتراك في تخزين جميع استعلامات النموذج مؤقتًا عن طريق تعيين خاصية $rememberFor
مع عدد الثواني التي تريد تخزين النتائج فيها مؤقتًا. استخدم هذه الميزة بحذر لأنها قد تؤدي إلى سلوك غير متوقع وبيانات قديمة في تطبيقك إذا لم تكن على دراية بكيفية عمله.
استنادًا إلى بنية الحزمة، لا يمكن حذف ذاكرة التخزين المؤقت لاستعلام واحد. ولكن إذا قمت بوضع علامة على أي استعلامات باستخدام علامات ذاكرة التخزين المؤقت، فيمكنك مسح ذاكرة التخزين المؤقت للعلامة:
User:: flushCache ( ' user_queries ' );
إذا استخدمت الخاصية $rememberCacheTag
فيمكنك استخدام الطريقة بدون معلمة وسيتم مسح ذاكرات التخزين المؤقت للعلامة التي تم تعيينها بواسطة $rememberCacheTag
:
User:: flushCache ();
إذا كنت بحاجة إلى تعطيل ذاكرة التخزين المؤقت لاستعلام معين، يمكنك استخدام التابع dontRemember
:
User:: latest ()-> dontRemember ()-> get ();