Ehcache เป็นกรอบการแคชในกระบวนการชวาบริสุทธิ์ที่มีคุณสมบัติที่รวดเร็วและไม่ติดมันและเป็น cacheprovider เริ่มต้นในไฮเบอร์เนต
Ehcache ให้กลยุทธ์การแคชที่หลากหลายซึ่งส่วนใหญ่แบ่งออกเป็นหน่วยความจำและระดับดิสก์ดังนั้นจึงไม่จำเป็นต้องกังวลเกี่ยวกับปัญหาความจุ
Spring-Boot เป็นกรอบการรวมที่รวดเร็วที่ออกแบบมาเพื่อลดความซับซ้อนของกระบวนการก่อสร้างและการพัฒนาเริ่มต้นของแอพพลิเคชั่นฤดูใบไม้ผลิใหม่ เฟรมเวิร์กใช้วิธีเฉพาะในการกำหนดค่าเพื่อให้นักพัฒนาไม่จำเป็นต้องกำหนดการกำหนดค่าหม้อไอน้ำอีกต่อไป
เนื่องจาก Spring-Boot ไม่จำเป็นต้องใช้ไฟล์การกำหนดค่าหม้อไอน้ำใด ๆ Spring-Boot จะแตกต่างกันเล็กน้อยเมื่อรวมเฟรมเวิร์กอื่น ๆ เข้าด้วยกัน
1.Spring-Boot เป็นกรอบสำหรับแพ็คเกจ JAR ที่จัดการผ่าน Maven การพึ่งพาที่จำเป็นสำหรับการรวม Ehcache มีดังนี้
<การพึ่งพา> <roupId> org.springframework </groupId> <ratifactid> Spring-Context-Support </artifactid> </perdency> <pendency> <droupId> net.sf.ehcache </groupid>
ไฟล์ pom.xml เฉพาะมีดังนี้
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" <Sersion> 0.0.1-SNAPSHOT </Sersion> <!-สืบทอดค่าเริ่มต้นจาก Spring Boot-> <carent> <roupId> org.springframework.boot </groupId> <RoupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </Artifactid> </serpendency> <perdency> <droupId> org.springframework.boot </groupid> <RoupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Thymeleaf </artifactid> </การพึ่งพาอาศัย> <การพึ่งพาอาศัย> <roupId> MySQL </GroupId> <RoupID> com.google.guava </groupId> <ratifactid> Guava </artifactid> <persion> 17.0 </เวอร์ชัน> </การพึ่งพาอาศัยกัน> <การพึ่งพา> <roupId> org.sspringframework </groupid> <roupId> net.sf.ehcache </groupId> <ratifactid> ehcache </artifactid> <cersion> 2.8.3 </เวอร์ชัน> </การพึ่งพาอาศัย> </perctencies> <perdencyManagement> <RoupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Maven-Plugin </artifactid> </plugin> </plugins> </uffle> <repositories> <repository> <snapshots> <enabled> True </enabled> </snapshots> </repository> <drepository> <id> Spring-Milestones </id> <url> http://repo.spring.io/milestone </url> </repository> <id> spring-snapshots </id> <url> http://repo.spring.io/snapshot </url> </pluginrepository> <pluginrepository> <id> Spring-Milestones </id> </pluginRepositories> </project>
2. การใช้ ehcache เราต้องการ ehcache.xml เพื่อกำหนดแอตทริบิวต์แคช
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: nonamespaceschemalocation = "http:/ehcache.orgcache.org <diskstore path = "java.io.tmpdir /tmp_ehcache" /> <defaultCache Eternal = "false" maxElementsInMemory = "1000" overflowTodisk = "false" diskpersistent = "false" timetoidleseconds = "0" name = "demo" eternal = "false" maxElementsInMemory = "100" overflowTodisk = "false" diskpersistent = "false" timetoidleseconds = "0" timetoliveseconds = "300" MemoryStoreEvictionPolicy = "LRU" />
อธิบายแท็กในไฟล์ XML นี้
(1) .diskstore: เป็นเส้นทางแคช Ehcache แบ่งออกเป็นสองระดับ: หน่วยความจำและดิสก์ คุณสมบัตินี้กำหนดตำแหน่งแคชของดิสก์ พารามิเตอร์มีการอธิบายดังนี้:
user.home ผู้ใช้โฮมไดเรกทอรี user.dir ผู้ใช้ไดเรกทอรีการทำงานปัจจุบัน java.io.tmpdir เส้นทางไฟล์ชั่วคราวเริ่มต้น
(2) .DefaultCache: นโยบายแคชเริ่มต้น เมื่อ Ehcache ไม่สามารถหาแคชที่กำหนดได้นโยบายแคชนี้จะถูกใช้ สามารถกำหนดได้เพียงอันเดียว
(3) .cache: นโยบายแคชแบบกำหนดเองนโยบายแคชที่กำหนดเอง พารามิเตอร์มีการอธิบายดังนี้:
คุณสมบัติขององค์ประกอบแคช:
ชื่อ: ชื่อแคช
MaxElementsInMemory: จำนวนสูงสุดของวัตถุแคชในหน่วยความจำ
MaxElementsOndisk: จำนวนสูงสุดของวัตถุแคชในฮาร์ดดิสก์ ถ้าเป็น 0 มันหมายถึงอินฟินิตี้
นิรันดร์: จริงหมายความว่าวัตถุไม่เคยหมดอายุ ในเวลานี้คุณสมบัติ timetoidleseconds และ timetoliveseconds จะถูกละเว้นและค่าเริ่มต้นเป็นเท็จ
OverflowTodisk: จริงหมายความว่าเมื่อจำนวนวัตถุที่แคชในหน่วยความจำถึงขีด จำกัด MaxElementsInmemory วัตถุที่ล้นออกจะถูกเขียนลงในแคชฮาร์ดดิสก์ หมายเหตุ: หากวัตถุที่แคชถูกเขียนลงในฮาร์ดดิสก์วัตถุจะต้องใช้อินเตอร์เฟส serializable
DiskspoolBuffersizemb: ขนาดแคชดิสก์, ค่าเริ่มต้นคือ 30MB แต่ละแคชควรมีพื้นที่แคชของตัวเอง
Diskpersistent: ไม่ว่าจะแคชเครื่องเสมือนรีสตาร์ทข้อมูลระหว่างข้อมูล
diskexpirythreadIntervalseconds: ดิสก์ความล้มเหลวเธรดช่วงเวลาทำงาน, ค่าเริ่มต้นคือ 120 วินาที
Timetoidleseconds: ตั้งค่าเวลาสูงสุดเพื่อให้วัตถุไม่ได้ใช้งานในไม่กี่วินาที เมื่อวัตถุได้รับการเข้าถึงเป็นครั้งสุดท้ายหากค่าคุณสมบัติ Timetoidleseconds เกินค่าคุณสมบัติ Timetoidleseconds วัตถุจะหมดอายุและ Ehcache จะล้างออกจากแคช คุณสมบัตินี้ใช้ได้เฉพาะในกรณีที่คุณสมบัตินิรันดร์เป็นเท็จ หากค่าคุณสมบัติเป็น 0 นั่นหมายความว่าวัตถุสามารถใช้งานได้อย่างไม่มีกำหนดอย่างไม่มีกำหนด
Timetoliveseconds: ตั้งค่าเวลาสูงสุดที่วัตถุอนุญาตให้มีอยู่ในแคชในไม่กี่วินาที เมื่อวัตถุถูกเก็บไว้ในแคชหากเวลาในแคชเกินกว่าค่าคุณสมบัติ timetoliveseconds วัตถุจะหมดอายุและ ehcache จะล้างออกจากแคช คุณสมบัตินี้ใช้ได้เฉพาะในกรณีที่คุณสมบัตินิรันดร์เป็นเท็จ หากค่าคุณสมบัติเป็น 0 นั่นหมายความว่าวัตถุสามารถมีอยู่ในแคชได้อย่างไม่มีกำหนด timetoliveseconds จะต้องมากกว่าคุณสมบัติ timetoidleseconds เพื่อให้สมเหตุสมผล
MemoryStoreEvictionPolicy: เมื่อถึงขีด จำกัด MaxElementsInMemory Ehcache จะทำความสะอาดหน่วยความจำตามนโยบายที่ระบุ นโยบายทางเลือกคือ: LRU (ล่าสุดที่ใช้เมื่อเร็ว ๆ นี้, นโยบายเริ่มต้น), FIFO (ครั้งแรก, ออกแรก) และ LFU (จำนวนการเข้าชมขั้นต่ำ)
3. เปิดเผย Ehcache Manager ไปยังคอนเทนเนอร์บริบทสปริง
@การกำหนดค่า // คำอธิบายประกอบเริ่มต้นแคช @enablecachingpublic คลาส cacheconfiguration {/** ehcache ผู้จัดการหลัก*/ @bean (ชื่อ = "appehcachecachemanager") สาธารณะ ehcachemanager ehcachecachemanager } / * * ตามการตั้งค่าของการแบ่งปันหรือไม่ฤดูใบไม้ผลิสร้างฐาน ehcache ผ่าน cachemanager.create () หรือ cachemanager ใหม่ () ตามลำดับ */ @bean สาธารณะ ehcachemanagerfactorybean ehcachemanagerfactorybean () {ehcachemanagerfactorybean cachemanagerfactorybean = ใหม่ ehcachemanagerfactorybean (); CacheManagerFactoryBean.SetConfigLocation (ใหม่ classPathResource ("conf/ehcache-app.xml")); CacheManagerFactoryBean.setshared (จริง); กลับ CacheManagerFactoryBean; -@Configuration: คำอธิบายประกอบสำหรับ Spring-Boot ส่วนใหญ่เป็นคำอธิบายประกอบเป็นคลาสการกำหนดค่าและให้ความสำคัญกับการสแกน
@Bean: เพิ่มถั่วลงในภาชนะสปริง
การกำหนดค่าทั้งหมดดำเนินการจนถึงตอนนี้และการรวมกรอบการทำงานผ่าน Spring-Boot นั้นง่ายมาก
4. ใช้ ehcache
การใช้ Ehcache ส่วนใหญ่ผ่านกลไกแคชสปริง เราได้ใช้กลไกแคชสปริงโดยใช้ EHCache ดังนั้นเราจึงสามารถใช้กลไกแคชสปริงได้อย่างสมบูรณ์ในแง่ของการใช้งาน
มีโน้ตไม่กี่อย่างที่เกี่ยวข้อง:
@Cacheable: รับผิดชอบในการเพิ่มค่าส่งคืนของวิธีลงในแคชพารามิเตอร์ 3
@CacheEvict: รับผิดชอบในการล้างแคชพารามิเตอร์ 4
พารามิเตอร์คำอธิบาย:
ค่า: ชื่อตำแหน่งแคชไม่สามารถว่างเปล่า หากใช้ ehcache มันเป็นชื่อของแคชที่ประกาศใน ehcache.xml
คีย์: คีย์แคช, ค่าเริ่มต้นว่างเปล่าซึ่งหมายถึงประเภทพารามิเตอร์และค่าพารามิเตอร์ของวิธีที่ใช้เป็นคีย์และรองรับ Spel
เงื่อนไข: เงื่อนไขทริกเกอร์เฉพาะในกรณีที่มีการเพิ่มเงื่อนไขลงในแคช ค่าเริ่มต้นนั้นว่างเปล่าซึ่งหมายความว่าทั้งหมดจะถูกเพิ่มลงในแคชและรองรับ Spel
Allentries: พารามิเตอร์ cacheevict จริงหมายถึงการล้างแคชทั้งหมดในค่าค่าเริ่มต้นเป็นเท็จ
โดยไม่ต้องกังวลใจเพิ่มเติมเพียงอัปโหลดรหัส:
@ServicePublic Class CachedEmoserviceImpl ใช้ CachedEmoservice {/** * คีย์แคช */สตริงสุดท้ายคงที่สาธารณะสิ่งสุดท้าย _all_key = "/" thing_all/""; /*** แอตทริบิวต์ค่าระบุว่านโยบายแคชที่จะใช้ นโยบายแคชอยู่ใน ehcache.xml */ public Static String สุดท้าย demo_cache_name = "Demo"; @CacheEvict (value = demo_cache_name, key = thing_all_key) @Override โมฆะสาธารณะสร้าง (สิ่งที่) {olm id = getNextid (); thing.setid (id); data.put (id, Thing); } @cacheable (value = demo_cache_name, key = "#thing.getId () + 'thing'") @Override สิ่งสาธารณะสิ่งที่ findById (Long id) {System.err.println ("ไม่มีแคช!" + id); ส่งคืน data.get (id); } @cacheable (value = demo_cache_name, key = thing_all_key) @Override รายการสาธารณะ <king> findall () {return lists.newarraylist (data.values ()); } @Override @cacheput (value = demo_cache_name, key = "#thing.getId ()+'thing'") @cacheevict (value = demo_cache_name, key = thing_all_key) สาธารณะอัปเดตอะไร data.put (thing.getId (), สิ่ง); สิ่งที่กลับมา; } @cacheeVict (value = demo_cache_name) @Override โมฆะสาธารณะลบ (id ยาว) {data.remove (id); -5. คุณจะต้องใส่คำอธิบายประกอบในวิธีการบริการเลเยอร์ผ่านคำอธิบายประกอบและคุณสามารถใช้แคชจัดเก็บแคชไว้ในค้นหา ** และล้างแคชในการลบ ** และอัปเดต **
สรุป
ข้างต้นเป็นวิธีการของการบูตสปริงบูทรวม EHCache เพื่อใช้กลไกการแคชที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!