Symfony2: إدارة ذاكرة التخزين المؤقت بنفسك
ذاكرة التخزين المؤقت موجودة في كل مكان في الحوسبة ولحسن الحظ في أماكن أخرى. بدونها ، ستكون أوقات المعالجة أطول بكثير! في الوقت الذي تستخدم فيه جميع الأطر التي تستحق الاسم نظام ذاكرة التخزين المؤقت ، فلماذا نحتاج إلى إدارة ذاكرة التخزين المؤقت بأنفسنا؟
ملخص
ذاكرة التخزين المؤقت في Symfony2
في Symfony2 ، يمكنك بسهولة إعداد نظام ذاكرة التخزين المؤقت. علاوة على ذلك ، إذا أردنا أن نكون دقيقين ، فيبدو أن لدى Symfony نظام ذاكرة التخزين المؤقت الخاص بها (app / cache /الحياة الفطرية/) ، وأنه يمكننا أيضًا توصيل نظام ذاكرة التخزين المؤقت على مستوى الخادم (Apache ، IIS ، ...). يمكن التحكم في ذاكرة التخزين المؤقت هذه بشكل كامل والذاكرة متقلبة. بمجرد إعادة تشغيل الخادم ، يتم حذف ذاكرة التخزين المؤقت للخادم.
أنظمة التخزين المؤقت
ما هي أنظمة التخزين المؤقت الموجودة؟ من الذاكرة ، تظهر ثلاثة برامج بانتظام.
- XCache
- أعطها
- APC
APC الآن إهمال منذ إصدار PHP 5.4 ، لذلك لا أوصي بمحاولة توصيله.
في حالتي ، سأستخدم XCache. يمكنك أيضًا العثور على رسالتي حول كيفية تثبيت XCache.
لماذا تدير ذاكرة التخزين المؤقت الخاصة بك بنفسك
أستطيع أن أرى بعض التعليقات ترد وتسأل "لماذا؟ ". بينما يسمح لك Doctrine بسهولة استخدام ذاكرة التخزين المؤقت عبر طريقته useResultCache (استخدام ، تأخير ، معرف). جوابي بسيط: القيام بعلاجات مجانية.
مثال صغير لأعطيك بعض الأفكار. لنفترض أنني أخزن عنصرًا مؤقتًا من قاعدة بيانات. إذا قمت بتعديل هذا الكيان ، فلن يتم تحديث ذاكرة التخزين المؤقت حتى تنتهي صلاحية البيانات. من خلال إدارة ذاكرة التخزين المؤقت المخصصة ، سأكون قادرًا حتى قبل أن تصل ذاكرة التخزين المؤقت إلى الوقت المخصص لإعادة تعيين البيانات الجديدة واستبدال البيانات القديمة. هذا يتطلب إدارة كبيرة ، ولكن مكاسب الأداء يمكن أن تكون كبيرة.
Symfony2 وكيفية إدارة ذاكرة التخزين المؤقت الخاصة بك
أقدم لك رمز المذكرة الصغير هذا لإدارته بسهولة. في حالتنا ، تهدف وظيفة Gist إلى إرجاع نتيجة استعلام SQL.
النموذج الأولي: تنفيذ الوظيفة ($ sql_query ، $ id = null ، $ delay = 3600) ؛
الإعدادات:
- _sqlسؤال يتوافق مع استعلام SQL الذي ترغب في تنفيذه.
- id هو المعرف المرتبط بالبيانات المخزنة مؤقتًا. بالنسبة لمعرف x ، سيكون لديك محتوى x.
- تأخير هو الحد الأقصى للوقت الذي تعطي ذاكرة التخزين المؤقت سيكون صالحًا. افتراضيًا ، 3600 ثانية. هذا يعني أنه بعد تخزين بياناتك مؤقتًا ، ستكون متاحة لمدة 3600 ثانية.
12345678910111213141516171819202122232425262728وظيفة تنفيذ ($ sql_query، $ id = null، $ delay = 3600){// نعلن نسخة مخبأة$ cacheDriver = جديد DoctrineCommonCacheXcacheCache () ،النتائج بالدولار = فارغة;// إذا تم إدخال معرّف وكان نظام ذاكرة التخزين المؤقت يحتوي على بيانات لمعرّف "x"if ($ id! = فارغة && $ cacheDriver-> يحتوي على ($ id)) {// ثم نأخذ البيانات المخزنة مؤقتًا لمعرف "x"النتائج $ = $ cacheDriver-> fetch ($ id) ؛}// إذا لم تكن هناك بيانات ، في حالة كانت البيانات المخزنة مؤقتًا تساوي قيمة خاليةif (النتائج بالدولار == فارغة) {// نقوم باسترداد البياناتالنتائج بالدولار = $ هذا-> حاوية-> الحصول على ("عقيدة") -> getManager () -> getRepository ("NamespaceNameBundle: الكيان") -> findAll () ؛// إذا كان لدينا معرف التخزين المؤقتif ($ id! = فارغة) {// نقوم بحفظ البيانات لمعرف x وللتأخير y$ cacheDriver-> save ($ id، $ results، intval ($ delay))؛}}// نعيد النتائج عن طريق تقييد الطلبات المستقبليةعائد أعلى النتائج $؛}
حسنًا ، أتمنى أن تساعدك هذه المذكرة. نراكم قريبا وشكرا على قراءة هذا المنشور!