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 แบ่งออกเป็นสองระดับ: หน่วยความจำและดิสก์ คุณสมบัตินี้กำหนดตำแหน่งแคชของดิสก์ พารามิเตอร์มีการอธิบายดังนี้:
(2) .DefaultCache: นโยบายแคชเริ่มต้น เมื่อ Ehcache ไม่สามารถหาแคชที่กำหนดได้นโยบายแคชนี้จะถูกใช้ สามารถกำหนดได้เพียงอันเดียว
(3) .cache: นโยบายแคชแบบกำหนดเองนโยบายแคชที่กำหนดเอง พารามิเตอร์มีการอธิบายดังนี้:
Springboot รองรับวิธีการแคชจำนวนมาก: Redis, Guava, Ehcahe, Jcache ฯลฯ
อธิบายความแตกต่างระหว่าง Redis และ Ehcache:
REDIS: มันเป็นโปรแกรมการทำงานอิสระ หลังจากการติดตั้งเพียงอย่างเดียวมันถูกจัดการโดยใช้เจไดในชวา เนื่องจากเป็นอิสระถ้าคุณเขียนโปรแกรมทดสอบหน่วยให้ใส่ข้อมูลบางอย่างใน Redis แล้วเขียนโปรแกรมอื่นเพื่อรับข้อมูลคุณสามารถรับข้อมูลได้ -
Ehcache: เห็นได้ชัดว่าแตกต่างจาก Redis มันถูกผูกไว้กับโปรแกรม Java เมื่อโปรแกรม Java ยังมีชีวิตอยู่มันก็ยังมีชีวิตอยู่ ตัวอย่างเช่นหากคุณเขียนโปรแกรมอิสระเพื่อใส่ข้อมูลแล้วเขียนโปรแกรมอิสระเพื่อรับข้อมูลคุณจะไม่ได้รับข้อมูล ข้อมูลสามารถรับได้ในโปรแกรมอิสระเท่านั้น
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
พารามิเตอร์คำอธิบาย:
โดยไม่ต้องกังวลใจเพิ่มเติมเพียงอัปโหลดรหัส:
@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. คุณจะต้องใส่คำอธิบายประกอบในวิธีการบริการเลเยอร์ผ่านคำอธิบายประกอบและคุณสามารถใช้แคชจัดเก็บแคชไว้ในค้นหา ** และล้างแคชในการลบ ** และอัปเดต **
คำอธิบายโดยละเอียดเกี่ยวกับคำอธิบายประกอบแคช
@CacheConFig: ส่วนใหญ่ใช้เพื่อกำหนดค่าการกำหนดค่าแคชทั่วไปบางอย่างที่จะใช้ในคลาสนี้ ที่นี่ @cacheconfig (cachenames = "ผู้ใช้"): เนื้อหาที่ส่งคืนในวัตถุการเข้าถึงข้อมูลได้รับการกำหนดค่าให้เก็บไว้ในวัตถุแคชที่ชื่อผู้ใช้ นอกจากนี้เรายังสามารถกำหนดได้โดยตรงผ่านชื่อของ Cacheable ของชุดแคชโดยไม่ต้องใช้คำอธิบายประกอบนี้
@Cacheable: ค่าส่งคืนของฟังก์ชั่น findByName ที่กำหนดค่าจะถูกเพิ่มลงในแคช ในเวลาเดียวกันเมื่อสอบถามมันจะได้รับจากแคชก่อนและหากไม่มีอยู่การเข้าถึงฐานข้อมูลจะเริ่มต้น คำอธิบายประกอบนี้ส่วนใหญ่มีพารามิเตอร์ต่อไปนี้:
นอกเหนือจากคำอธิบายประกอบทั้งสองที่ใช้ที่นี่แล้วยังมีคำอธิบายประกอบหลักต่อไปนี้:
@CachePut: กำหนดค่าบนฟังก์ชั่นสามารถแคชตามพารามิเตอร์และกำหนดเงื่อนไข ซึ่งแตกต่างจาก @cacheable มันเรียกฟังก์ชั่นจริง ๆ ทุกครั้งดังนั้นจึงใช้สำหรับการเพิ่มข้อมูลและการปรับเปลี่ยน พารามิเตอร์ของมันคล้ายกับ @cacheable สำหรับฟังก์ชั่นเฉพาะโปรดดูการวิเคราะห์ข้างต้นของพารามิเตอร์ @cacheable
@CacheEvict: กำหนดค่าบนฟังก์ชั่นโดยปกติจะใช้ในวิธีการลบเพื่อลบข้อมูลที่เกี่ยวข้องออกจากแคช นอกเหนือจากพารามิเตอร์เดียวกับ @Cacheable แล้วยังมีพารามิเตอร์สองตัวต่อไปนี้:
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น