تصف هذه المقالة تقنية التخزين المؤقت في إطار السبات. شاركه للرجوع إليه ، على النحو التالي:
يتم تقسيم ذاكرة التخزين المؤقت لإطار السبات إلى ذاكرة التخزين المؤقت للجلسة وذاكرة التخزين المؤقت للجلسة ، والمعروفة أيضًا باسم ذاكرة التخزين المؤقت من المستوى 1 وذاكرة التخزين المؤقت للمستوى 2.
ذاكرة التخزين المؤقت المستوى 1:
ذاكرة التخزين المؤقت من المستوى 1 هي ذاكرة التخزين المؤقت على مستوى الجلسة ، والتي لها دورة حياة قصيرة ، تتوافق مع الجلسة ، ويتم إدارتها بواسطة الإسبات ، وهي ذاكرة التخزين المؤقت على مستوى المعاملة. عندما يستدعي البرنامج طريقة تحميل الجلسة () ، GET () ، طريقة حفظ () ، طريقة SaveorUpDate () ، طريقة التحديث () أو طريقة واجهة الاستعلام ، ستقوم Hibernate بتخزين كائن الكيان ؛ عندما يتم الاستعلام عن كائن الكيان من خلال طريقة LOAD () أو طريقة GET () ، سيتم الاستعلام أولاً في عملية التخزين المؤقت. فقط عندما لا يمكن العثور على كائن الكيان ، ستصدر السبات عبارات SQL للاستعلام في قاعدة البيانات ، وبالتالي تحسين كفاءة استخدام السبات.
على سبيل المثال:
package com.xqh.util ؛ استيراد org.hibernate.session ؛ استيراد com.xqh.model.user ؛ اختبار الفئة العامة {public static void main (string [] args) {session session = null ؛ try {session = hibernateutil.getsession () ؛ // الحصول على sessionssion.begintransaction () ؛ // تمكين المعاملة system.out.println ("الاستعلام الأول:") ؛ مستخدم المستخدم = (المستخدم) session.get (user.class ، integer (1)) user1.getName ()) ؛ session.getTransaction (). الالتزام ()عندما يتحقق البرنامج لأول مرة من كائن المستخدم من خلال طريقة GET () ، ستصدر Hibernate عبارة SQL للاستعلام. في هذا الوقت ، تقوم Hibernate بتخزين ذاكرة التخزين المؤقت من المستوى الأول على كائن المستخدم الخاص به ؛ عند الاستعلام من خلال طريقة GET () مرة أخرى ، لن يصدر Hibernate عبارة SQL لأن اسم المستخدم موجود بالفعل في ذاكرة التخزين المؤقت للمستوى الأول. نتائج تشغيل البرنامج:
الاستعلام الأول: hibernate: selectUser0_.id as id0_0_ ، user0_.name as name0_0_ ، user0_.sex as sex0_0_ fromtb_user_info user0_ whereUser0_.id =؟ username:
ملاحظة: تتوافق دورة حياة ذاكرة التخزين المؤقت من المستوى الأول مع الجلسة ، ولا تتم مشاركتها بين الجلسات. في جلسات مختلفة ، لا يمكن الحصول على كائنات الكيان المخبأة في جلسات أخرى.
ذاكرة التخزين المؤقت المستوى 2:
ذاكرة التخزين المؤقت من المستوى الثاني هي ذاكرة التخزين المؤقت على مستوى الجلسة ، ودورة حياتها تتفق مع SessionFactory. يمكن مشاركة ذاكرة التخزين المؤقت الثانوية بين جلسات متعددة ، وهي ذاكرة تخزين مؤقت على مستوى العملية أو على مستوى الكتلة.
ذاكرة التخزين المؤقت من المستوى 2 هي مكون من قابلية للتخزين المؤقت قابلة للتوصيل ، ويتطلب استخدامه دعم منتجات ذاكرة التخزين المؤقت لجهة خارجية. في إطار السبات ، يتم تكوين سياسة استخدام ذاكرة التخزين المؤقت الثانوية من خلال ملف تكوين السبات.
1. أضف ملف تكوين ذاكرة التخزين المؤقت ehcache.xml
<ehcache> <! - تعيين المسار إلى الدليل حيث يتم إنشاء ملفات DACHE .DATA. إذا كان المسار عبارة عن خاصية نظام Java ، فسيتم استبدال قيمة byits في Running vM. path = "java.io.tmpdir"/> <!-تكوين ذاكرة التخزين المؤقت الافتراضية. ستطبق هذه على Caches المبرمجة التي تم إنشاؤها من خلال Cachemanager. السمات التالية مطلوبة لـ DefaultCache: MaxInmemory - يحدد الحد الأقصى لعدد الكائنات التي سيتم إنشاؤها في Memoryeternal - ما إذا كانت العناصر أبدية. إذا تم تجاهل المهلة الأبدية ، ولم تنتهي صلاحية العنصر. TimetoidlesEconds - يحدد الوقت للانفصال عن عنصر قبل انتهاء صلاحيته. يتم استخدامه فقط العنصر ليس أبديًا. الوقت الخمول هو الآن - آخر مرة تم الوصول إليها في الجدول الزمني - يحدد الوقت للعيش لعنصر ما قبل انتهاء صلاحيته. يتم استخدامه فقط العنصر ليس أبديًا. TTL هو الآن-Creation TimoverflowTodisk-يحدد ما إذا كانت العناصر يمكن أن تتفوق على القرص عندما وصلت Cachehas في الذاكرة إلى حد MaxInmemory .--> <defaultCacheMaxElementSinmemory = "10000" eternal = "false" timetoideSeconds = "120" ذاكرة التخزين المؤقت. أضف إعدادات تكوين ذاكرة التخزين المؤقت الخاصة بك هنا. إذا لم يكن لديك تكوين لذاكرة التخزين المؤقت الخاصة بك ، فسيتم إصدار تحذير عندما يبدأ Thecachemanager ، حيث تكون السمات التالية مطلوبة لـ DefaultCache: الاسم - يعين اسم ذاكرة التخزين المؤقت. يستخدم هذا لتحديد ذاكرة التخزين المؤقت. يجب أن يكون فريدًا. maxinmemory - يحدد الحد الأقصى لعدد الكائنات التي سيتم إنشاؤها في Memoryeternal - مجموعات ما إذا كانت العناصر أبدية. إذا تم تجاهل المهلة الأبدية ، ولم تنتهي صلاحية العنصر. TimetoidlesEconds - يحدد الوقت للانفصال عن عنصر قبل انتهاء صلاحيته. يتم استخدامه فقط العنصر ليس أبديًا. الوقت الخمول هو الآن - آخر مرة تم الوصول إليها في الجدول الزمني - يحدد الوقت للعيش لعنصر ما قبل انتهاء صلاحيته. يتم استخدامه فقط العنصر ليس أبديًا. TTL هو الآن-Creation TimoverflowTodisk-يحدد ما إذا كانت العناصر يمكن أن تتفوق على القرص عندما وصلت Cachehas في الذاكرة إلى حد MaxInmemory ذاكرة التخزين المؤقت Thedisk ، والتي ستذهب في هذا التكوين إلى أي مكان تم تعريف java.io.tmp على نظامك. على نظام Linux قياسي ، سيكون هذا /tmp "-> <cache name =" samplecache1 "maxElementSinMemory =" 10000 "eternal =" false "timetoidleSeConds =" 300 "timetoliveseconds =" 600 "overflowtisk =" true " /> <! لا تنتهي صلاحيتها.
2. اضبط ملف تكوين السبات.
<!-تمكين المستوى 2 ذاكرة التخزين المؤقت 2-> <name ybormernate.cache.use_second_level_cache "> true </property> <!-حدد موفر منتج ذاكرة التخزين المؤقت-> <property name =" hibernate.cache.provider_class "> org.cache.cache.ehcacheprovider </property <! ذاكرة التخزين المؤقت ---> <class classe use = "read-only"> </class cache>
مثال:
package com.xqh.Util ؛ import org.hibernate.session ؛ import com.xqh.model.user ؛ test class public {public static void main (string [] args) {session session = null ؛ // أول جلسة {session = hibernateutil.getSession () ؛ session.begintransaction () ؛ system.out.println ("الاستعلام الأول:") ؛ مستخدم المستخدم = (المستخدم) session.get (user.class ، 1) ؛ system.out.println ("اسم المستخدم:" + المستخدم. {E.PrintStackTrace () ؛ // سوف يقوم خطأ بإعادة جلسة المعاملة. // تمكين جلسة التخزين المؤقت الثانية. begintransactaction () ؛ system.out.println ("الاستعلام الثاني:") جلسة المعاملة. getTransaction (). rollback () ؛} أخيرًا {// أغلق كائن الجلسة hibernateutil.closesession (الجلسة) ؛}}}تتم مشاركة ذاكرة التخزين المؤقت الثانوية بين الجلسات ، بحيث يمكن تحميل الكائن نفسه في جلسات مختلفة. ستقوم السبات بإصدار بيان SQL واحد فقط. عندما يتم تحميل الكائن في المرة الثانية ، ستحصل السبات على هذا الكائن من ذاكرة التخزين المؤقت.
نتائج البرنامج:
الاستعلام الأول: hibernate: selectUser0_.id as id0_0_ ، user0_.name as name0_0_ ، user0_.sex as sex0_0_ fromtb_user_info user0_ whereUser0_.id =؟ username:
بالنسبة لذاكرة التخزين المؤقت L2 ، يمكن استخدام بعض البيانات المحدثة بشكل غير متكرر أو البيانات المشار إليها ، وسيتم تحسين أدائها بشكل كبير في هذا الوقت. ومع ذلك ، إذا تم استخدام البيانات التي تم تغييرها بشكل متكرر في ذاكرة التخزين المؤقت L2 ، فإن الأداء سيؤدي إلى حدوث مشاكل معينة.
آمل أن يكون الوصف في هذه المقالة مفيدًا لبرمجة Java للجميع استنادًا إلى إطار السبات.