1. مقدمة في ذاكرة التخزين المؤقت MyBatis
تمامًا مثل معظم أطر طبقة الثبات ، يوفر MyBatis أيضًا دعمًا لخزائن L1 و L2.
1. ذاكرة التخزين المؤقت من المستوى 1:
يتمتع ذاكرة التخزين المؤقت HashMap المحلية القائمة على PerpetualCache على نطاق تخزين للجلسة. بعد تدفق الجلسة أو الإغلاق ، سيتم مسح جميع ذاكرة التخزين المؤقت في الجلسة.
2. ذاكرة التخزين المؤقت المستوى 2:
ذاكرة التخزين المؤقت من المستوى الثاني هي نفس ذاكرة التخزين المؤقت من المستوى الأول ، والافتراضي هو تخزين PerpetualCache و HashMap. الفرق هو أن نطاق التخزين الخاص به هو Mapper (مساحة الاسم) ، ويمكنه تخصيص مصدر التخزين ، مثل Ehcache.
3. بالنسبة لآلية تحديث بيانات ذاكرة التخزين المؤقت ، عندما يتم تنفيذ نطاق معين (نطاق جلسة ذاكرة التخزين المؤقت من المستوى الأول/مساحات ذاكرة التخزين المؤقت من المستوى الثاني) ، سيتم مسح جميع عمليات التخزين المؤقت في هذا النطاق افتراضيًا.
1.1. اختبار ذاكرة التخزين المؤقت من MyBatis المستوى 1
package me.gacl.test ؛ import me.gacl.domain.user ؛ import me.gacl.util.mybatisutil ؛ import org.apache.ibatis.session.sqlsession ؛ import org.junt افتراضيًا)*/@testpublic void testcache () {sqlsession session = mybatisutil.getsqlsession () ؛ string strup ) ؛ system.out.println (user) ؛ session.close () ؛/*. يجب أن تكون نفس الجلسة. إذا تم إغلاق كائن الجلسة () ، فمن المستحيل استخدامه */session = mybatisutil.getsqlsession () ؛ user = session.selectone (بيان ،) ؛ system.out.println (المستخدم) ؛/ *. شروط الاستعلام هي نفسها */user = session.selectone (بيان ،) ؛ system.out.println (المستخدم) ؛/ *. لا تم تنفيذ session.clearcache () لتنظيف ذاكرة التخزين المؤقت*/// session.clearcache () ؛ user = session.selectone (بيان ،) ؛ system.out.println (المستخدم) ؛/*. لم يتم تنفيذ أي عمليات إضافة/حذف (ستنظف هذه العمليات ذاكرة التخزين المؤقت)*/session.update ("me.gacl.mapping.usermapper.updateuser" ، مستخدم جديد (، "مستخدم" ،)) ؛ user = session.selectone (بيان ،) 1.2. اختبار ذاكرة التخزين المؤقت من MyBatis المستوى 2
1. قم بتشغيل ذاكرة التخزين المؤقت الثانوية وأضف التكوين التالي إلى ملف usermapper.xml
<mapper namespace = "me.gacl.mapping.usermapper"> <!-قم بتشغيل المستويات 2 ذاكرة التخزين المؤقت-> <cache/>
2. اختبر ذاكرة التخزين المؤقت الثانوية
package me.gacl.test ؛ import me.gacl.domain.user ؛ import me.gacl.util.mybatisutil ؛ import org.apache.ibatis.session.sqlsession ؛ import org.apache.ibatis.session.sqlsessionfactory ؛ TestTwolevelcache {/** اختبار المستوى 2 Cache* استخدم كائنين مختلفين sqlsession لتنفيذ استعلامات مع نفس ظروف الاستعلام. لن يتم إرسال عبارات SQL أثناء الاستعلام الثاني ، ولكن يتم جلب البيانات مباشرة من ذاكرة التخزين المؤقت*/@testpublic void testcache () {string state = "me.gacl.mapping.usermapper.getuser" مصنع. opensession () ؛ SQLSession Session = factory.opensession () ؛ // عند استخدام ذاكرة التخزين المؤقت الثانوية ، يجب على فئة المستخدم تنفيذ واجهة قابلة للتسلسل ===> المستخدم يطبق تسلسليًا مستخدمًا قابلاً للتسلية = Session.Selectone (بيان ،) System.out.println ("user ="+user) ؛ // لأن كائنين مختلفين sqlsession يتم استخدامهما ، حتى لو كانت شروط الاستعلام هي نفسها ، فلن يتم تمكين ذاكرة التخزين المؤقت للمستوى الأول. user = session.selectone (عبارة) 1.3. تعليمات تكميلية للذاكرة التخزين المؤقت الثانوية
1. سيتم تخزين جميع عبارات تحديد جميع البيانات في ملف التعيين.
2. قم بتخطيط جميع الإدراج وتحديث وحذف العبارات في ملف البيان سيقوم بتحديث ذاكرة التخزين المؤقت.
3. سيتم إعادة محاكمة ذاكرة التخزين المؤقت باستخدام الخوارزمية الأقل استخدامًا (LRU ، الأقل استخدامًا).
4. سيتم تحديث ذاكرة التخزين المؤقت وفقًا للفاصل الزمني المحدد.
5. سوف تخزين ذاكرة التخزين المؤقت 1024 كائنات
الخصائص الشائعة لعلامات ذاكرة التخزين المؤقت:
<cache exfiction = "fifo" <!-استراتيجية إعادة التدوير هي الأولى ، أولاً-خارج-> flushinterval = "60000" <!-وقت التحديث التلقائي 60S-> size = "512" <!-ذاكرة التخزين المؤقت حتى 512 كائن مرجعي-> readonly = "true"/> <!-readly->
سأعطيك بعض المعرفة:
مثل السبات ، MyBatis لديه أيضا آلية ذاكرة التخزين المؤقت
يعتمد ذاكرة التخزين المؤقت من المستوى 1 على ذاكرة التخزين المؤقت المحلية لـ HashMap لـ PerpetualCache (تأتي MyBatis) ونطاقها هو الجلسة ، لذلك عندما تلتزم الجلسة أو إغلاقها ، سيتم مسح ذاكرة التخزين المؤقت.
تعتمد ذاكرة التخزين المؤقت من المستوى الثاني أيضًا على PerpetualCache بشكل افتراضي ، ولكن يمكن استخدامها لإنشاء مصادر تخزين ، مثل Ehcache.
تقوم ذاكرة التخزين المؤقت من المستوى الأول بتخزين بيانات SQL ، في حين أن ذاكرة التخزين المؤقت من المستوى الثاني تخبؤ كائن النتيجة. انظر المثال التالي (تم تعيين مستوى سجل MyBatis على تصحيح)