مقدمة
معرفتنا هي أن عنق الزجاجة للبرنامج يكمن في قاعدة البيانات ، وأن معرفتنا تعرف أيضًا أن سرعة الذاكرة أسرع بكثير من سرعة القرص الثابت. عندما تحتاج قسمنا إلى الحصول على نفس البيانات بشكل متكرر ، يطلب قسمنا قاعدة البيانات أو الخدمة عن بُعد مرارًا وتكرارًا ، مما يؤدي إلى الكثير من الوقت الذي يقضيه في استعلام قاعدة البيانات أو مكالمات الطريقة عن بُعد ، مما يؤدي إلى تدهور في أداء البرنامج ، وهو ما يمثل مشكلة في حل ذاكرة التخزين المؤقت للبيانات.
دعم التخزين المؤقت الربيع
يحدد Spring Org.springframework.cache.cachemanager و org.springframework.cache.cache لتوحيد تقنيات التخزين المؤقت المختلفة. من بينها ، Cachemanager هي واجهة مجردة لتكنولوجيا ذاكرة التخزين المؤقت المختلفة التي توفرها الربيع. تتضمن واجهة ذاكرة التخزين المؤقت عمليات ذاكرة التخزين المؤقت المختلفة (إضافة وحذف للحصول على ذاكرة التخزين المؤقت ، نظامنا عمومًا لا يتعامل بشكل مباشر مع هذه الواجهة)
Cachemanager بدعم من الربيع
للحصول على تقنيات التخزين المؤقت المختلفة ، يجب تنفيذ مختلفين من Cachemanagers. يحدد الربيع تطبيق CacheManager في الجدول التالي.
عند تنفيذ أي Cachemanager ، تحتاج إلى تسجيل حبة تنفذ CacheManager. بالطبع ، كل تقنية التخزين المؤقت لديها العديد من التكوينات الإضافية ، ولكن تكوين Cachemanager ضروري.
شرح التخزين المؤقت التصريحي
يوفر Spring 4 تعليقات توضيحية لإعلان قواعد ذاكرة التخزين المؤقت (مثال حية على AOP باستخدام الصيغ المشروحة) ، كما هو موضح في الجدول.
قم بتشغيل ذاكرة التخزين المؤقت التصريبية
إن تشغيل دعم التخزين المؤقت التصريحي أمر بسيط للغاية ، فأنت بحاجة فقط إلى استخدام شرح enabelcaching على فئة التكوين.
دعم Springboot
مفتاح استخدام تقنية ذاكرة التخزين المؤقت في ربيع الصين هو تكوين CacheManager. يقوم Springbok تلقائيًا بتكوين تطبيقات CacheManager المتعددة لبابنا. في بيئة التمهيد الربيع ، يتطلب استخدام تقنية ذاكرة التخزين المؤقت فقط استيراد حزم التبعية لتكنولوجيا ذاكرة التخزين المؤقت ذات الصلة في المشروع وتكوين الفئة لتمكين دعم ذاكرة التخزين المؤقت باستخدام enabelcaching.
أمثلة صغيرة
يتم تنفيذ مثال صغير باستخدام ذاكرة التخزين المؤقت لـ SpringBoot+JPA+.
مثال على الدليل خطوات
1. إنشاء مشروع Maven
قم بإنشاء ملف Maven Project Pom.xml جديدًا على النحو التالي:
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <soph> 1.0-snapshot </version> <Arnal> <roupiD> org.springframework.boot </rougiD> <StifactId> spring-boot-starter-parent </starifactid> <soph> 1.3.0.Release </version> <maven.compiler.target> 1.8 </maven.compiler.target> <maven.compiler.source> <StifactId> spring-boot-starter cache </stifactid> </sependency> <reperency> <roupiD> org.springframework.boot </rougeid> <StifactId> spring-boot-starter-data-jpa </stifactid> </rependency> <StifactId> Spring-Boot-Starter-Web </stifactid> </sependency> <reperence> <roupiD> net.sf.ehcache </groupiD> <StifactId> ehcache </stifactid> </premited> <!-db-> <predencid> mysql </groupid <StifactId> mysql-connector-java </stifactid> <الإصدار> 6.0.5 </version> </repreadency> <reperence> <roupiD> com.mchang <StifactId> commons-logging </stifactid> </section> </starysions> </reperence> </
2. تكوين قاعدة البيانات
قم بإنشاء ملف Application.Properties جديد في دليل SRC/Main/Esouches ، والمحتوى هو معلومات اتصال قاعدة البيانات ، على النحو التالي:
application.properties
ms.db.driverClassName = com.mysql.jdbc.driverms.db.url = jdbc: mysql: // localhost: 3306/cache؟ prepstmtcachesize = 517 & cacheprepstmts = true & autoreconnec t = true & useUnicode = true & maracterencoding = utf-8 & usESSL = false & loomultiqueries = truems.db.username = rootms.db.password = xxxxxms.db.maxactive = 500
قم بإنشاء ملف تكوين DBConfig.java جديد وتكوين مصدر البيانات
Package com.us.example.config ؛/*** تم إنشاؤه بواسطة Yangyibo في 17/1/13. */import java.beans.propertyVetoException ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.context.annotation.bean org.springframework.core.env.environment ؛ import com.mchange.v2.c3p0.combopooledDataSource ؛ configurationpublic class dbconfig {autowired private Environment env ؛ bean (name = "datasource") public combopooledDataSource dataSource () remrowsvetoException {combopooledDataSource dataSource = new CombopooledDataSource () ؛ datasource.setDriverClass (env.getProperty ("Ms.DB.DriverClassName")) ؛ datasource.setjdbcurl (env.getProperty ("Ms.DB.Url")) ؛ datasource.setuser (env.getProperty ("Ms.DB.Username")) ؛ datasource.setPassword (env.getProperty ("Ms.DB.Password")) ؛ datasource.setMaxPoolsize (20) ؛ datasource.setMinPoolsize (5) ؛ datasource.setInitialPoolsize (10) ؛ datasource.setMaxIdletime (300) ؛ datasource.setacquirecrement (5) ؛ datasource.setIdleConnectionTestperiod (60) ؛ إرجاع مصدر البيانات ؛ }}تصميم قاعدة البيانات ، تحتوي قاعدة البيانات على جدول شخص واحد فقط ، والتصميم كما يلي:
3. jpa التكوين
ملف تكوين Spring-Data-JPA كما يلي:
package com.us.example.config ؛ استيراد java.util.hashmap ؛ استيراد java.util.map ؛ استيراد javax.persistence.entityManagerFactory org.springframework.context.annotation.bean ؛ استيراد org.springframework.context.anting org.springframework.orm.jpa.localContainerentityManagerFactorybean ؛ استيراد org.springframework.mor.jpa.vendor.hibernatejpavendoradapter ؛ org.springframework.tranctaction.platformtransaction ؛ org.springframework.transaction.annotation.enableTransActionManagement ؛/*** تم إنشاؤه بواسطة Yangyibo في 17/1/13. */@configuration@enablejParePositories ("com.us.example.dao")@enableTransActionManagement@componentscanpublic class jpaconfig {autowired private datasource dataSource ؛ bean public entityManagerFactory entityManagerFactory () {hibernatejpavendoradapter pendoradapter = new HibernateJpavendorAdapter () ؛ LocalContainerentityManagerFactorybean Factory = NewContainerentityManagerFactorybean () ؛ مصنع. مصنع. Factory.SetDatasource (DataSource) ؛ خريطة <سلسلة ، كائن> jpaproperties = new hashmap <> () ؛ jpaproperties.put ("hibernate.ejb.naming_strategy" ، "org.hibernate.cfg.improvednamingstrategy") ؛ jpaproperties.put ("hibernate.jdbc.batch_size" ، 50) ؛ مصنع. Factory.AfterPropertiesset () ؛ Return Factory.getObject () ؛ } Bean platformTransActionManager TransactionManager () {JPatransActionManager TxManager = New JPatransActionManager () ؛ txmanager.setentityManagerFactory (entityManagerFactory ()) ؛ إرجاع Txmanager ؛ }}4. اكتب الفاصوليا وطبقات داو
كيان فئة شخص
package com.us.example.bean ؛ استيراد javax.persistence.entity ؛ استيراد javax.persistence.generatedvalue ؛ استيراد javax.persistence.id ؛ استيراد javax.persistence.table ؛/*** تم إنشاؤه بواسطة yangyibo في 17/1/13. */ @entity @table (name = "person") public class person {idgeneratedValue private id ؛ اسم السلسلة الخاصة ؛ عصر عدد صحيح خاص ؛ عنوان السلسلة الخاص ؛ public person () {super () ؛ } الشخص العام (معرف طويل ، اسم سلسلة ، عصر عدد صحيح ، عنوان السلسلة) {super () ؛ this.id = id ؛ this.name = name ؛ this.age = العمر ؛ this.address = العنوان ؛ } public long getId () {return id ؛ } public void setId (id long) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } integer getAge () {return Age ؛ } public void setage (integer age) {this.age = age ؛ } السلسلة العامة getAddress () {return address ؛ } public void setAddress (عنوان السلسلة) {this.address = العنوان ؛ }}داو طبقة ، personrepository.java
package com.us.example.dao ؛ استيراد com.us.example.bean.person ؛ استيراد org.springframework.data.jpa.repository.jparepository ؛/*** تم إنشاؤه بواسطة yangyibo في 17/1/13. */الواجهة العامة personrepository يمتد JParePository <شخص ، طويل> {}5. اكتب طبقة الخدمة
واجهة الخدمة
package com.us.example.service ؛ import com.us.example.bean.person ؛/*** تم إنشاؤه بواسطة yangyibo في 17/1/13. */الواجهة العامة demoservice {public person save (شخص) ؛ إزالة الفراغ العام (معرف طويل) ؛ الشخص العام FindOne (شخص) ؛}التنفيذ: (مفتاح ، أضف ذاكرة التخزين المؤقت هنا)
package com.us.example.service.impl ؛ import com.us.example.bean org.springframework.cache.antation.cacheevict ؛ استيراد org.springframework.cache.annotation.cacheput ؛ استيراد org.springframework.cache.annotation.cachable ؛ */ @servicepublic class demoServiceImpl تنفذ demoService {autowired personrepository personrepository ؛ Override //@cacheput Caches تم إضافته حديثًا أو تحديث البيانات إلى ذاكرة التخزين المؤقت ، حيث يكون اسم ذاكرة التخزين المؤقت أشخاصًا. مفتاح البيانات هو معرف الشخص cacheput (value = "people" ، key = "#person.id") System.out.println ("for id ، key هو:"+p.getID ()+"بيانات مخبأة") ؛ العودة P ؛ } Override // @cacheevict قم بإزالة البيانات باستخدام معرف المفتاح من ذاكرة التخزين المؤقت للأشخاص cacheeVict (value = "people") void public remove (ong id) تم تحديده ، يتم حفظ معلمات الأسلوب في ذاكرة التخزين المؤقت.6. كتابة وحدة التحكم
لراحة الاختبار ، يتم استخدام GET
package com.us.example.controller ؛ استيراد com.us.example.bean.person ؛ استيراد com.us.example.service.demoservice ؛ استيراد org.springframework.beans.factory.annotation.autowired org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.responsebody ؛ استيراد org.springframework.web.bind.annotation.restController ؛/** ** ** تم إنشاؤه بواسطة yangyibo على 17/1/13. */ @restControllerPublic Class Cachecontroller {Auutowired Private Demoservice DemoService ؛ // http: // localhost: 8080/put؟ name = abel & age = 23 & address = shanghai @requestmapping ("/put") public public (الشخص الشخص) {return demoservice.save (person) ؛ } // http: // localhost: 8080/able؟ id = 1 @requestmapping ("/able") public public recponsebody (شخص شخص) {return demoservice.findone (الشخص) ؛ } // http: // localhost: 8080/evit؟ id = 1 @requestmapping ("/evit") السلسلة العامة evit (معرف طويل) {demoservice.remove (id) ؛ العودة "موافق" ؛ }}7. ابدأ ذاكرة التخزين المؤقت
تذكر تمكين تكوين ذاكرة التخزين المؤقت في فئة بدء التشغيل.
package com.us.example ؛ استيراد org.springframework.boot.autoconfigure.springbootapplication ؛ استيراد org.springframework.cache.annotation.enableCaching ؛ استيراد org.springframework. org.springframework.context.annotation.componentscan ؛ استيراد org.springframework.boot.springapplication.* ؛/*** تم إنشاؤه بواسطة yangyibo في 17/1/13. */@componentscan (basePackages = "com.us.example")@springBootApplication@enableCachingPublic Application {public static void main (string [] args) {configurablePlippingContext Run = run (application.class ، args) ؛ }}8. اختبار التحقق وقدرة التحقق:
ابدأ فئة التطبيق ، وبعد بدء تشغيله ، أدخل: http: // localhost: 8080/able؟ id = 1 في المتصفح (أولاً لتهيئة عدة أجزاء من البيانات في قاعدة البيانات.)
إخراج وحدة التحكم:
"بيانات المعرف والمفتاح هي: 1" تم تخزينها مؤقتًا لهذا الاستعلام. إذا قمت بالاستعلام عن البيانات مرة أخرى ، فلن يظهر هذا البيان ، وهذا هو ، فلن يتم الاستعلام عن قاعدة البيانات.
وضع التفتيش
أدخل المتصفح: http: // localhost: 8080/put؟ name = abel & age = 23 & address = Shanghai (أدخل بيانات في قاعدة البيانات ووضع البيانات في ذاكرة التخزين المؤقت.)
في هذا الوقت ، تخرج وحدة التحكم السجل:
ثم اتصل بالطريقة القديرة مرة أخرى للاستعلام عن البيانات. لن يتم الاستعلام عن قاعدة البيانات ، وسيتم قراءة البيانات مباشرة من ذاكرة التخزين المؤقت.
اختبار EVIT
أدخل: http: // localhost: 8080/evit؟ id = 1 في المتصفح (امسح السجل من ذاكرة التخزين المؤقت ، بعد مسحه ، سيتم وضع السجل في ذاكرة التخزين المؤقت مرة أخرى بعد الوصول إلى السجل.)
إخراج وحدة التحكم:
تبديل ذاكرة التخزين المؤقت
1. التبديل إلى ehcache كذاكرة التخزين المؤقت
إضافة تبعيات في ملف pom.xml
<Rependency> <roupiD> net.sf.ehcache </rougeid> <StifactId> ehcache </shintifactid> </perimency>
قم بإنشاء ملف التكوين ehcache.xml في مجلد المورد. محتويات ملف تكوين Ehcache الجديد هي كما يلي. سيقوم Boot Spring Spring هذا بالمسح تلقائيًا
<؟
2. التبديل إلى الجوافة كذاكرة التخزين المؤقت
فقط أضف تبعيات في بوم
<Rependency> <roupeD> com.google.guava </rougiD> <StifactId> الجوافا </artifactid> <الإصدار> 18.0 </version> </dependency>
3. قم بالتبديل إلى redis كذاكرة التخزين المؤقت
يرجى قراءة المدونة التالية
مرجع لهذه المقالة: "تعطيل Javaee Development: Spring Boot Battical Battle"
رمز المصدر لهذا المقال: https://github.com/527515025/springboot.git
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.