แนวคิดแคชฤดูใบไม้ผลิ
เริ่มต้นด้วย Spring 3.1 ซึ่งเป็นวิธีที่โปร่งใสในการเพิ่มแคชลงในแอปพลิเคชันสปริงที่มีอยู่นั้นมีให้ซึ่งใช้เช่น @TransAction มีเลเยอร์ของสิ่งที่เป็นนามธรรมระหว่างระดับแอปพลิเคชันและที่เก็บข้อมูลแบ็กเอนด์ เลเยอร์ของสิ่งที่เป็นนามธรรมนี้ได้รับการออกแบบมาเพื่อห่อหุ้มที่เก็บแบ็กเอนด์ที่สามารถเสียบได้ (Ehcache Guava Redis) เพื่อลดการบุกรุกที่เกิดจากแคชไปยังรหัสธุรกิจที่มีอยู่
เทคโนโลยีการแคชของฤดูใบไม้ผลิก็มีความยืดหยุ่นอย่างมาก ไม่เพียง แต่สามารถใช้ Spel (ภาษานิพจน์สปริง) เพื่อกำหนดคีย์แคชและเงื่อนไขต่าง ๆ เท่านั้น แต่ยังให้โซลูชั่นการจัดเก็บชั่วคราวของแคชนอกกล่องและยังรองรับการรวมเข้ากับแคชมืออาชีพหลักเช่น EHCache
ลักษณะของมันสรุปได้ดังนี้:
แนวคิดการออกแบบ
เช่นเดียวกับบริการอื่น ๆ ของ Framework Spring Cache Spring First ให้ชั้นของสิ่งที่เป็นนามธรรมและส่วนที่เป็นนามธรรมหลักจะสะท้อนให้เห็นในอินเทอร์เฟซทั้งสอง
org.springframework.cache.cache
org.springframework.cache.CacheManager
แคชย่อมาจากแคชเอง
CacheManager แสดงถึงการประมวลผลและการจัดการแคช ฯลฯ ความหมายของสิ่งที่เป็นนามธรรมคือการปิดกั้นความแตกต่างในรายละเอียดการใช้งานและให้ความสามารถในการปรับขนาด เลเยอร์ของแคชที่เป็นนามธรรม decouples การใช้แคชและการจัดเก็บแบ็คเอนด์ของแคชเพื่อให้สามารถเปลี่ยนที่เก็บข้อมูลแบ็คเอนด์ได้อย่างง่ายดายในอนาคต
ใช้แคชสปริงในสามขั้นตอน:
ประกาศแคช
@Cacheable ("หนังสือ") หนังสือสาธารณะหนังสือสาธารณะ (ISBN ISBN) {... } การใช้งานง่ายมาก เพิ่ม @Cacheable และคำอธิบายประกอบอื่น ๆ ในวิธีการแคชผลลัพธ์ของวิธีการ
เมื่อมีการเรียกวิธีการก่อนอื่นให้ตรวจสอบว่ามีการโทรไปยังพารามิเตอร์เดียวกันในแคชสำหรับวิธีการหรือไม่ ถ้าเป็นเช่นนั้นค้นหาจากแคชและส่งคืนผลลัพธ์ ถ้าไม่ดำเนินการตามวิธีการเฉพาะของตรรกะและแคชผลลัพธ์ที่เป็นแคช แน่นอนว่าตรรกะชุดนี้โปร่งใสสำหรับผู้โทร หมายเหตุสำหรับการดำเนินการแคชอื่น ๆ มีดังนี้ (ดูเอกสารอย่างเป็นทางการสำหรับรายละเอียด):
เปิดการรองรับแคชสปริง
<แคช: คำอธิบายประกอบที่ขับเคลื่อนด้วย />
หรือใช้วิธีการเพิ่มความคิดเห็น @enablecaching
กำหนดค่าที่เก็บแบ็กเอนด์แคช
Spring Cache ให้การใช้งานการจัดเก็บแบ็คเอนด์ในตัวหลายครั้ง: ต่อไปนี้เป็นการนำไปใช้งานเฉพาะของ CacheManager
นอกจากนี้ข้อมูลสปริงยังมีผู้จัดการแคชสองตัว:
หากคุณใช้แคชแบบกระจายเช่น Memcached หรือ Redis คุณสามารถใช้แคชและ CacheManager ด้วยตัวเองและประกาศในบริบท หากจำเป็นต้องมีการใช้แคชที่แตกต่างกันหลายครั้งผู้ใช้ cachemanagers ต่าง ๆ สามารถห่อหุ้มด้วยกันในโหมดการรวมกัน
คีย์แคชถูกสร้างขึ้นอย่างไร
เราทุกคนรู้ว่าวิธีการจัดเก็บข้อมูลของแคชโดยทั่วไปเป็นค่าคีย์ ดังนั้นในสปริงแคชชุดคีย์เป็นอย่างไร? ที่นี่เราจำเป็นต้องแนะนำ Keygenerator ซึ่งรับผิดชอบกลยุทธ์การสร้างคีย์และค่าเริ่มต้นคือการใช้ SimpleKeyGenerator
จะเห็นได้ว่าเป็นค่าแฮชของอาร์เรย์พารามิเตอร์ที่สั่งซื้อ แน่นอนผู้ใช้สามารถปรับแต่งกลยุทธ์การสร้างคีย์
การใช้แคชฤดูใบไม้ผลิ
ข้างต้นคือการใช้งานทั่วไปของสปริงแคชซึ่งแสดงให้เห็นว่าฤดูใบไม้ผลิถูกนำไปใช้อย่างไร
เมื่อเรียนรู้ซอร์สโค้ดฤดูใบไม้ผลิมีสองสิ่งที่ต้องจดจำ:
โปรดจำไว้ว่าสิ่งเหล่านี้และมันง่ายกว่าที่จะเข้าใจการใช้งานและกลไกรันไทม์ของส่วนประกอบบางอย่างในฤดูใบไม้ผลิ
สปริงแคชก็ไม่มีข้อยกเว้น มันเป็นการใช้งาน Spring AOP ทั่วไป ในฤดูใบไม้ผลิ AOP สามารถเข้าใจได้อย่างง่ายดายว่าเป็นพร็อกซี (ยกเว้นแง่มุม) เราประกาศว่าคลาสของวิธี @cacheable จะถูกพร็อกซีและในพร็อกซีการสืบค้นแคชและการตั้งค่าจะถูกนำไปใช้
การสร้างโครงสร้างพื้นฐานแคช
บทความก่อนหน้า (ภาพรวมของโมดูลสปริง AOP) ได้พูดคุยเกี่ยวกับความจริงที่ว่ากระบวนการสร้างของฤดูใบไม้ผลิ AOP นั้นเป็นหลักในการใช้ beanpostprocessor สร้างพร็อกซีในกระบวนการสร้างถั่วและผูกที่ปรึกษาทั้งหมดที่ใช้กับถั่วสำหรับพร็อกซี
แนวคิดหลักหลายประการของ AOP Master ใน Spring Advisor คำแนะนำ Pointcut
คำแนะนำ = พฤติกรรมการแทรกในการสกัดกั้นส่วน
pointcut = pointcut ไปยังส่วน
ที่ปรึกษา = คำแนะนำ + pointcut
สปริงแคชยังมีกระบวนการที่คล้ายกันกับ AOPs อื่น ๆ
สร้างพร็อกซีแคช
เส้นสกัดกั้นของแคช
วัตถุพร็อกซีแคชที่สร้างขึ้นในสปริงแคชใช้คลาสโรงงาน CacheproxyFactoryBean โดยทั่วไปการสร้างพร็อกซีมาตรฐานในฤดูใบไม้ผลิขึ้นอยู่กับพร็อกซีแฟคเตอร์เบียน ที่นี่เพื่อจัดการตรรกะแคชที่สะดวกยิ่งขึ้นสปริงแนะนำ cacheproxyfactorybean เพื่อแสดงพร็อกซีที่เกี่ยวข้องกับแคชโดยเฉพาะ แคชพร็อกซีสามารถห่อหุ้มวัตถุเป้าหมาย Singleton และพร็อกซีอินเทอร์เฟซทั้งหมดที่นำมาใช้โดยวัตถุเป้าหมาย
อย่างที่คุณเห็นใน cacheproxyfactorybean คุณสมบัติที่สำคัญคือ cacheinterceptor คลาสนี้เป็นคลาสการใช้งานของ MethodInterceptor ความรับผิดชอบของคลาสนี้คือการดำเนินการแคชเฉพาะในวิธีการเป้าหมายวัตถุเป้าหมายซึ่งเป็นความรับผิดชอบของคำแนะนำที่กล่าวถึงข้างต้น
ดำเนินการต่อไปเพื่อดำเนินการวิธีการส่งคืนเป็นวิธีการในคลาสแม่ cacheaspectsupport
ในวิธีนี้ในที่สุดเราก็พบตรรกะสุดท้ายของการดำเนินการแคช
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com