Springboot ใช้ฟังก์ชั่นการแคชข้อมูลที่ระดับคำอธิบายประกอบตามเทคโนโลยี AOP ของฤดูใบไม้ผลิ การกำหนดค่าแคชทั้งหมดได้รับการกำหนดค่าที่ระดับคำอธิบายประกอบเช่นการทำธุรกรรมที่ประกาศ
ฤดูใบไม้ผลิกำหนด cachemanager และอินเทอร์เฟซแคชเพื่อรวมเทคโนโลยีการแคชที่แตกต่างกัน ในหมู่พวกเขา CacheManager เป็นอินเทอร์เฟซนามธรรมสำหรับเทคโนโลยีการแคชต่างๆที่จัดทำโดยฤดูใบไม้ผลิ อินเทอร์เฟซแคชมีการดำเนินการแคชต่างๆ
ผู้ทำนาย
สำหรับเทคโนโลยีแคชที่แตกต่างกันจำเป็นต้องใช้ cachemanagers ที่แตกต่างกัน ฤดูใบไม้ผลิกำหนดการใช้งาน cachemanger ต่อไปนี้
| ผู้ทำนาย | อธิบาย |
|---|---|
| SimpleCacheManager | ใช้คอลเลกชันง่าย ๆ เพื่อเก็บแคชส่วนใหญ่สำหรับการทดสอบ |
| พร้อมกัน | ใช้พร้อมกันเป็นเทคโนโลยีแคช (ค่าเริ่มต้น) |
| noopcachemanager | สำหรับการทดสอบ |
| Ehcachecachemanager | Ehcache ใช้เป็นเทคโนโลยีแคชและเคยใช้ในการใช้บ่อยเมื่อไฮเบอร์เนต |
| Guavacachemanager | Guavacache โดยใช้ Google Guava เป็นเทคโนโลยีแคช |
| HazelcastCachemanager | การใช้เฮเซลคาสต์เป็นเทคนิคการแคช |
| jcachecachemanager | การใช้งานโดยใช้ JCache Standard เป็นเทคนิคการแคชเช่น Apache Commons JCS |
| คนที่อ่านออกมา | การใช้ Redis เป็นเทคโนโลยีการแคช |
SpringBoot ปกติได้กำหนดค่า EHCACHE, COLLECTION, GUAVA, CONCURRENTMAP โดยอัตโนมัติและแคชอื่น ๆ สำหรับเราและใช้งานร่วมกันโดยค่าเริ่มต้น แอปพลิเคชันของ Springboot ไฟล์การกำหนดค่า properties กำหนดค่าโดยใช้คุณสมบัติของคำนำหน้า Spring.cache
การกำหนดค่าแอปพลิเคชัน
Spring.cache.type =#ประเภทเทคนิคแคช Spring.cache.cache-names = ชื่อของแอปพลิเคชันเริ่มสร้างแคช, spring.cache.ehcache.config = ehcache การกำหนดค่าไฟล์ตำแหน่ง Spring.cache.infinispan.config = Infinispan คลาสการใช้งานของ JCache เมื่อคลาสการใช้งาน jCache หลายคลาส
การกำหนดค่าคลาสรายการ
เพิ่มคำอธิบายประกอบ @enableCaching
คำอธิบายประกอบแคช
| คำอธิบายประกอบ | อธิบาย |
|---|---|
| @cacheable | ก่อนที่จะเรียกวิธีการคุณควรค้นหาค่าส่งคืนของวิธีการในแคชก่อน หากพบค่านี้ค่าแคชจะถูกส่งคืน มิฉะนั้นวิธีนี้จะถูกเรียกและค่าส่งคืนจะถูกวางไว้ในแคช |
| @cacheput | ใส่ค่าส่งคืนของวิธีลงในแคช แคชจะไม่ถูกตรวจสอบก่อนที่จะเรียกวิธีการและวิธีการจะถูกเรียก |
| @CacheEvict | ล้างหนึ่งรายการขึ้นไปในแคช |
| @แคช | คำอธิบายประกอบที่จัดกลุ่มสามารถนำไปใช้ในเวลาเดียวกันคำอธิบายประกอบแคชอื่น ๆ |
ใช้ ehcache ด้วยตนเอง
ในระหว่างกระบวนการพัฒนาจริงมีสถานการณ์ที่ไม่มีการใช้คำอธิบายประกอบและคุณต้องเพิ่มแคชด้วยตัวเอง ลองใช้ Ehcache เป็นตัวอย่างและเขียนกระบวนการกำหนดค่าสั้น ๆ
1. เพิ่มการพึ่งพา
แนะนำ Springboot-Cache และ Ehcache ควรสังเกตว่า Ehcache ไม่จำเป็นต้องมีการกำหนดค่าเวอร์ชันและรูท POM ของ Springboot ได้ถูกรวมเข้าด้วยกัน
<!-แคช-> <การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Cache </artifactid> </การพึ่งพาอาศัย> <!-ehcache-> <predency>
2. การกำหนดค่าคลาสรายการ
เพิ่มคำอธิบายประกอบ @enableCaching
@springbootapplication@enablecachingpublic คลาสการสาธิตคลาส {} 3. การกำหนดค่า ehcache
ในไดเรกทอรี SRC/Main/Resources ให้เพิ่มไฟล์ ehcache.xml ดูเนื้อหาในตอนท้ายของบทความ
4. แอปพลิเคชันการกำหนดค่าการประยุกต์
# กำหนดค่า ehcache cache spring.cache.type = ehcache# ระบุเส้นทางของ ehcache การกำหนดค่าไฟล์ spring.cache.ehcache.config = classpath: /hcache.xml
5. ใช้แคช
Inject Springboot กำหนดค่าถั่วโดยอัตโนมัติ org.springframework.cache.cachemanager
คลาสทดสอบอย่างง่าย:
แพ็คเกจ com.bbf.frame.test; นำเข้า com.bbf.frame.application; นำเข้า org.apache.commons.lang3.stringutils; นำเข้า org.junit.test; นำเข้า org.junit.runner.runwith; org.springframework.cache.cache; นำเข้า org.springframework.cache.cachemanager; นำเข้า org.springframework.test.context.junit4.springjunit4classrunner; javax.annotation.resource; @runwith (springjunit4classrunner.class)@webappconfiguration@springboottest (คลาส = application.class, webenvironment = Springboottest.webenvironment.mock) คลาสสาธารณะ @Test โมฆะสาธารณะ cachetest () {// แสดงช่องว่างทั้งหมด System.out.println (stringutils.join (cachemanager.getCachenames (), ",")); แคชแคช = cachemanager.getCache ("usercache"); cache.put ("key", "123"); System.out.println ("Cache Success"); String res = cache.get ("key", string.class); System.out.println (res); - ภาคผนวก ehcache.xml
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: nonamespaceschemalocation = "http:/ehcache.org ระบุไดเรกทอรีไฟล์ เมื่อ Ehcache เขียนข้อมูลไปยังฮาร์ดดิสก์ข้อมูลจะถูกเขียนลงในไดเรกทอรีไฟล์นี้-> <diskstore path = "java.io.tmpdir"/> <!-นโยบายการจัดการเริ่มต้น-> <defaultCache Eternal = "False" MaxElementsInMemory = "10000" timetoliveseconds = "120" diskexpirythreadIntervalseconds = "120" MemoryStoreEvictionPolicy = "LRU"/> <!- แคชนี้สามารถอยู่รอดได้จนถึงวินาทีวินาที หากระยะเวลาเกิน timetoidleseconds วินาทีและแคชไม่ถูกต้อง-> <cache name = "usercache" Eternal = "false" maxElementsInMemory = "100" overflowTodisk = "false" diskpersistent = "false" timetoidleseconds = "120" MaxElementsInMemory จำนวนสูงสุดของวัตถุที่แคชในหน่วยความจำดูขนาดกองของคุณเพื่อทำ-> <!-นิรันดร์: จริงหมายความว่าวัตถุจะไม่หมดอายุ ในเวลานี้คุณสมบัติ timetoidleseconds และ timetoliveseconds จะถูกละเว้นและค่าเริ่มต้นเป็นเท็จ-> <!-MaxElementsOndisd: จำนวนสูงสุดของวัตถุแคชในฮาร์ดดิสก์ถ้า 0 หมายถึงอินฟินิตี้-> <! แคชฮาร์ดดิสก์ หมายเหตุ: หากวัตถุที่แคชถูกเขียนลงในฮาร์ดดิสก์วัตถุจะต้องใช้อินเตอร์เฟส serializable -> <!-DiskspoolBuffersizemb: ขนาดแคชดิสก์, ค่าเริ่มต้นคือ 30MB แต่ละแคชควรมีพื้นที่แคชของตัวเอง -> <!-diskpersistent: ไม่ว่าจะแคชเครื่องเสมือนรีสตาร์ทข้อมูล-> <!-diskexpirythreadIntervalseconds: ดิสก์ล้มเหลวในช่วงเวลารันช่วงเวลาเริ่มต้นคือ 120 วินาที-> <!-timetoidleseconds: ตั้งเวลาสูงสุด เมื่อวัตถุได้รับการเข้าถึงเป็นครั้งสุดท้ายหากค่าคุณสมบัติ Timetoidleseconds เกินค่าคุณสมบัติ Timetoidleseconds วัตถุจะหมดอายุและ Ehcache จะล้างออกจากแคช คุณสมบัตินี้ใช้ได้เฉพาะในกรณีที่คุณสมบัตินิรันดร์เป็นเท็จ หากค่าของคุณสมบัตินี้คือ 0 นั่นหมายความว่าวัตถุนั้นสามารถใช้งานได้อย่างไม่มีกำหนด-> <!-timetoliveseconds: ตั้งเวลาสูงสุดที่วัตถุอนุญาตให้มีอยู่ในแคชในไม่กี่วินาที เมื่อวัตถุถูกเก็บไว้ในแคชหากเวลาในแคชเกินกว่าค่าคุณสมบัติ timetoliveseconds วัตถุจะหมดอายุและ ehcache จะล้างออกจากแคช คุณสมบัตินี้ใช้ได้เฉพาะในกรณีที่คุณสมบัตินิรันดร์เป็นเท็จ หากค่าคุณสมบัติเป็น 0 นั่นหมายความว่าวัตถุสามารถมีอยู่ในแคชได้อย่างไม่มีกำหนด Timetoliveseconds จะต้องมากกว่าคุณสมบัติ Timetoidleseconds เพื่อให้รู้สึก-> <!-MemoryStoreEvictionPolicy: เมื่อถึงขีด จำกัด MaxElementsInMemory Ehcache จะทำความสะอาดหน่วยความจำตามนโยบายที่ระบุ นโยบายทางเลือกคือ: LRU (ล่าสุดที่ใช้เมื่อเร็ว ๆ นี้, นโยบายเริ่มต้น), FIFO (ครั้งแรก, ออกแรก) และ LFU (จำนวนการเข้าชมขั้นต่ำ) -> </ehcache>
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น