يقدم
عند استخدام MyBatis ، يمكنك استخدام ذاكرة التخزين المؤقت الثانوية لزيادة سرعة الاستعلام وبالتالي تحسين تجربة المستخدم.
استخدم Redis لجعل ذاكرة التخزين المؤقت الثانوية لـ MyBatis ، لكن الذاكرة يمكن التحكم فيها. إذا تم نشر خادم منفصل لتذاكر ذاكرة التخزين المؤقت الثانوية> ، فمن السهل إدارته.
1. التبعيات التبعية في ملف pom.xml
<Rependency> <roupled> org.springframework.boot </rougiD> <intifactid> Spring-Boot-Starter-Data-Redis </stifactid> </sependency>
2. تكوين redis في ملف تكوين Application.Properties
## redis spring.redis.database = 0spring.redis.host = 172.16.3.123spring.redis.port = 6379spring.redis.password = spring.redis.pool.ma X-Active = 8spring.redis.pool.max-wait = -1spring.redis.pool.max-idle = 8spring.redis.pool.min-idle = 0spring.redis.timeout = 0
3. قم بإنشاء حزمة ذاكرة التخزين المؤقت ، ثم إنشاء فئتين ، يقوم ApplicationContexTholder بتنفيذ واجهة ApplicationContextAware. المحتوى المحدد كما يلي
package com.ruijie.springBootandRedis.cache ؛ استيراد org.springframework.beans.beansexce ApplicationContextholder تنفذ ApplicationContextAware {private static applicationContext ApplicationContext ؛ Override public void setapplicationContext (ApplicationContext CTX) يلقي beansexception {ApplicationContext = ctx ؛ } / ** * احصل على سياق التطبيق من Everywhere * * @Return * / public applicationcontext getApplicationContext () {return ApplicationContext ؛ } / ** * احصل على الفول من الفئة * * param clazz * param <T> * @RETURN * / public static <T> t getBean (class <T> clazz) {return ApplicationContext.getBean (clazz) ؛ } / ** * احصل على Bean by Class Name * * param name * param <T> * @RETURN * / public static <T> t getBean (اسم السلسلة) {return (t) ApplicationContext.getBean (name) ؛ }}4. إنشاء فئة Rediscache لتنفيذ واجهة ذاكرة التخزين المؤقت ، المحتوى المحدد هو كما يلي:
package com.ruijie.springbootandredis.cache ؛ استيراد org.apache.ibatis.cache.cache ؛ استيراد org.slf4j.logger org.springframework.data.redis.core.redistemplate ؛ استيراد org.springframework.data.core.valueporations java.util.concurrent.locks.ReentRanTreadWritelock ؛ فئة إعادة صياغة الطبقة العامة تنفذ ذاكرة التخزين المؤقت {private static final logger = loggerfactory.getLogger (rediscache.class) ؛ readWritelock readwritelock = جديد reentrantreadwritelock () ؛ معرف السلسلة النهائي الخاص ؛ // cache مثيل معرف redistemplate private redistemplate ؛ Private Static Final Expire_time_in_minutes = 30 ؛ . } this.id = id ؛ } Override public string getId () {return id ؛ } / ** * وضع نتيجة الاستعلام إلى redis * * param مفتاح * param value * / Override public void putObject (مفتاح الكائن ، قيمة الكائن) {try {redistemplate redistemplate = getRedIstemplate () ؛ valuesOperations opsforvalue = redistemplate.opsforvalue () ؛ opsforvalue.set (المفتاح ، القيمة ، expire_time_in_minutes ، timeUnit.minutes) ؛ logger.debug ("وضع نتيجة الاستعلام إلى redis") ؛ } catch (throwable t) {logger.error ("redis put fans" ، t) ؛ }} / ** * احصل على نتائج الاستعلام المخزنة من Redis * * param Key * return * / override الكائن العام getObject (مفتاح الكائن) {try {redistemplate redistemplate = getRedIstemplate () ؛ valuesOperations opsforvalue = redistemplate.opsforvalue () ؛ logger.debug ("الحصول على نتيجة الاستعلام المخزنة من redis") ؛ system.out.println ("****"+opsforvalue.get (key) .toString ()) ؛ إرجاع opsforvalue.get (مفتاح) ؛ } catch (throwable t) {logger.error ("redis get fails ، فشل في db" ، t) ؛ العودة لاغية. }} / ** * قم بإزالة نتيجة الاستعلام المخزنة من redis * * param Key * @return * / OverrideSuppressWarnings ("Unchecked") كائن عام removeObject (مفتاح الكائن) {try {redistemplate redistemplate = getRediStemplate () ؛ redistemplate.delete (مفتاح) ؛ logger.debug ("إزالة الاستعلام المخزنة من redis") ؛ } catch (throwable t) {logger.error ( } إرجاع فارغ ؛ } / ** * مسح مثيل ذاكرة التخزين المؤقت هذا * / Override public void clear () {redistemplate redistemplate = getRedIstemplate () ؛ redistemplate.execute ((rediscallback) connection -> {connection.flushdb () ؛ return null ؛}) ؛ logger.debug ("قم بمسح جميع نتائج الاستعلام المخزنة مؤقتًا من redis") ؛ } / ** * لا يتم استخدام هذه الطريقة * * return * / Override public int getSize () {return 0 ؛ } Override public readWritelock getReadWritelock () {return readWritelock ؛ } redistemplate private getRediStemplate () {if (redistemplate == null) {rediStemplate = applicationContextholder.getBean ("redistemplate") ؛ } إعادة redistemplate ؛ }}5. يجب تنفيذ الواجهة التسلسلية في فئة الكيان ويجب إعلان رقم التسلسل.
استاتيكي خاص نهائي الطويل المسلسل = -2566441764189220519L ؛
6. قم بتشغيل ذاكرة التخزين المؤقت لـ MyBatis من المستوى 2
تكوين في ملف تكوين pom.xml
mybatis.configuration.cache- تمكين = صحيح
أضف إلى واجهة Mapper
cachenamespace (التنفيذ = (com.demo.testdemo.cache.rediscache.class))
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.