การวิจัยหลักในบทความนี้เป็นเรื่องเกี่ยวกับเนื้อหาที่เกี่ยวข้องกับแคชฤดูใบไม้ผลิดังนี้
บทความนี้ได้รับการแก้ไขโดยประมาณตามการแปลของ Google เนื่องจากฉันไม่รู้ว่าข้อความต้นฉบับคืออะไรมันอาจนำไปสู่ข้อผิดพลาดและความไม่ถูกต้องในการแปล แต่ทิศทางทั่วไปรู้สึกดีมากดังนั้นฉันจึงแยกแยะที่นี่โดยหวังว่ามันจะเป็นประโยชน์
การแคชเป็นสิ่งจำเป็นอย่างยิ่งสำหรับทั้งคู่เพื่อปรับปรุงประสิทธิภาพการใช้งานและลดภาระงาน นอกจากนี้ยังมีประโยชน์โดยเฉพาะอย่างยิ่งในปัจจุบันซึ่งสามารถใช้ในการจัดการผู้เข้าชมหลายพันคนในการเกิดขึ้นพร้อมกันสถาปัตยกรรมของเว็บแอปพลิเคชันการจัดการแคชมุมฉากต่อตรรกะทางธุรกิจของแอปพลิเคชันและด้วยเหตุผลนี้ เริ่มต้นจากเวอร์ชัน 3.1 สปริงให้ API การจัดการแคชคล้ายกับการจัดการธุรกรรมที่ประกาศ อินเทอร์เฟซนามธรรมของแคชโดยใช้โซลูชันแคชที่แตกต่างกันในแบบครบวงจรมีผลกระทบน้อยที่สุดต่อรหัส
ฤดูใบไม้ผลิใช้วิธี Java เพื่อขอวิธีการเป็นครั้งแรกสำหรับการรวมกับพารามิเตอร์และสปริงเก็บค่าส่งคืนในแคช ดังนั้นคำขอต่อไปคือการใช้ค่าจากแคชโดยตรงโดยไม่ต้องโทรหาวิธีที่มีค่าใช้จ่ายสูง ทุกอย่างถูกนำไปใช้อย่างโปร่งใสโดยไม่ส่งผลกระทบต่อวิธีการที่เรียกว่า
ในโพสต์นี้เราจะเห็นการใช้งานของสองแคชที่แตกต่างกันจากฤดูใบไม้ผลิ
การรวมกันของสปริงและแคชนั้นง่ายและโปร่งใส วิธีการที่ต้องการแคชมีคำอธิบายประกอบโดย @Cacheable Annotation
@Cacheable (value = "datacache") public reponse getDatas (Long Param1, String param2) {} Datacache เป็นชื่อของแคชที่เกี่ยวข้อง เมื่อวิธีการนี้ถูกเรียกเป็นครั้งแรกวิธีการจะดำเนินการและจัดเก็บผลลัพธ์การดำเนินการในชุดผลลัพธ์ด้วยคีย์ลับแฮชออกจาก <พารามิเตอร์ 1 และพารามิเตอร์ 2> เป็นผลลัพธ์ เมื่อมีการเรียกพารามิเตอร์เดียวกันอีกครั้งวิธีนี้ไม่จำเป็นต้องดำเนินการอีกครั้ง
เป็นไปได้ว่าแคชมากกว่าหนึ่งเกี่ยวข้องกับวิธีการของเรา
@Cacheable ({"datacache", "default"}) public reponse getDatas (Long Param1, String param2) {} ในกรณีนี้แต่ละแคชจะถูกตรวจสอบก่อนที่จะดำเนินการวิธีการและหากมีการกดปุ่มค่าที่เกี่ยวข้องจะถูกส่งคืน
สัดส่วนของอัลกอริทึมพื้นฐานของตัวจัดการแคชค่อนข้างเล็ก แคชถือได้ว่าเป็นพื้นที่หน่วยความจำที่วัตถุที่เก็บไว้ถูกแมปโดยคีย์ที่ไม่ซ้ำกัน กระบวนการค้นหาวัตถุมีดังนี้:
1. คำนวณคีย์ (ใช้วิธีแฮชเพื่อรับแฮชโค้ด)
2. ค้นหาวัตถุตามค่าคีย์
3. หากพบวัตถุให้ส่งคืนผลลัพธ์
4. หากไม่สามารถพบได้คีย์ที่เกี่ยวข้องกับวัตถุจริงจะถูกคำนวณและวัตถุจะถูกเก็บไว้ในตำแหน่งที่สอดคล้องกัน
สปริงใช้แฮชแบบง่าย ๆ ซึ่งสร้างคีย์ตามพารามิเตอร์วิธีการที่ผ่าน
วิธีการเป้าหมายไม่สามารถสร้างคีย์ที่ไม่จำเป็นตามพารามิเตอร์ แต่มีเพียงบางกรณีง่าย ๆ เท่านั้นที่สร้างขึ้นตามพารามิเตอร์
@Cacheable (value = "datacache") สาธารณะ reponse getDatas (Long Param1, String Param2, Boolean Param3) {}@cacheable ช่วยให้นักพัฒนาสามารถระบุวิธีการสร้างคีย์ด้วยตนเอง คุณสามารถใช้การแสดงออกของ Spel เพื่อทำสิ่งนี้
@Cacheable (value = "datacache", key = "#param2") สาธารณะ reponse getDatas (Long Param1, String Param2, Boolean Param3) {} ในกรณีนี้ด้านบนพารามิเตอร์ของคีย์แคชเป็นเพียง parma2
ฤดูใบไม้ผลิยังอนุญาตให้มีคุณสมบัติซ้อนกัน
@Cacheable (value = "datacache", key =#param2.name ") สาธารณะ reponse getDatas (Long param1, data param2, boolean param3) {} สถานการณ์นี้เป็นกุญแจสำคัญที่คำนวณตามแอตทริบิวต์ชื่อของ parma2
มีแคชที่อาจไม่เหมาะสำหรับแคชในกรณีที่ใช้แล้ว แต่ในบางกรณีจำเป็นต้องใช้แคช เมื่อแคชแคชจะถูกประมวลผลตามจริงหรือเท็จที่คำนวณโดยนิพจน์ Spel และหากเงื่อนไขเป็นจริงแคชจะดำเนินการ
@Cacheable (value = "datacache", key = "#param2", เงื่อนไข = "#param2.length <64") สาธารณะ reponse getDatas (Long param1, String Param2, Boolean Param3) {} ในกรณีนี้แคชจะดำเนินการเฉพาะเมื่อความยาวของพารามิเตอร์ที่สองน้อยกว่า 64
แคชของสปริงไม่เพียง แต่สามารถแคชข้อมูล แต่ยังล้างที่เก็บแคช กระบวนการนี้ใช้เพื่อลบข้อมูลที่ล้าสมัยหรือข้อมูลแคชที่ไม่ได้ใช้ คำอธิบายประกอบ @CacheEvict กำหนดวิธีการดำเนินการล้างแคชเหล่านี้เป็นทริกเกอร์สำหรับการลบข้อมูลในแคช
@cacheeVict (value = "datacache") โมฆะสาธารณะ reloaddata () {}ตัวเลือกนี้จำเป็นมากและวิธีนี้จะใช้เมื่อต้องล้างข้อมูลแคช
ในการเปิดใช้งานการสนับสนุนแคชสำหรับโครงการฤดูใบไม้ผลิเราจำเป็นต้องเพิ่มความคิดเห็นแคชลงในเนมสเปซ
<ถั่ว xmlns = "http://www.springframework.org/schema/beans" xmlns: cache = "http://www.springframework.org/schema/cache" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: บริบท = "http://www.springframework.org/schema/context http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/cache http://ww.springframework http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/context
ลบคำอธิบายประกอบสามารถปิดใช้งานแคชหรือเปิดใช้งานการใช้แคชในคลาสการกำหนดค่าของเรา
@Configuration @enableCaching คลาสสาธารณะ AppConfig {} ข้อ จำกัด ทางเทคนิค
พารามิเตอร์ของวิธีการผ่านวัตถุต้องมีวิธีการ HashCode ของตนเองเพื่อคำนวณรหัสลับ
เมื่อวัตถุส่งผ่านและส่งคืนเป็นพารามิเตอร์ควรเป็นอนุกรม
ใช้การเลือก
ฤดูใบไม้ผลิมีการใช้งานพื้นฐานสองประการ:
เมื่อใช้พวกเขาคุณจะต้องประกาศ cachemanger และเอนทิตีผู้จัดการที่เหมาะสม
พร้อมกันโดยใช้ Java
<bean id = "cachemanager"> <span style = "พื้นที่สีขาว: pre"> </span> <property name = "caches"> <span style = "Space Space: pre"> </span> <et> <span style = "pre-space: pre"> </span> <bean name = "เริ่มต้น"
ผู้จัดการแต่ละคนต้องการชื่อซึ่งได้รับการยอมรับจากความคิดเห็น หนึ่งสามารถจัดการ simplecachemangers หลายตัวโดยผู้จัดการและการใช้งานนี้ไม่จำเป็นโดยทั่วไป
ใช้ ehcache
คำแถลง Cachemanger
Bean ID = "CacheManager"> <property name = "cachemanager" ref = "ehcache"/> </ebean> <bean id = "ehcache"> <property name = "configlocation" value = "classpath: ehcache.xml"/>
ในไฟล์ ehcache.xml เป็นไฟล์พารามิเตอร์แคชแอปพลิเคชัน:
<ehcache xsi: nonamespaceschemalocation = "ehcache.xsd" updateCheck = "true" การตรวจสอบ = "Autodetect" DynamicConfig = "true" maxbyteslocalheap = "150m"> <diskstore path = "java.io.tmpdir OverflowTodisk = "false"/> <cache name = "datacache" Eternal = "false" timetoidleseconds = "300" MaxByTesLocalHeap = "30m" timetoLiveSeconds = "300" overflowTodisk = "true" MemoryStoreEvictionPolicy = "LRU"/> </ehcache>
การใช้ ehcache เราสามารถกำหนดพารามิเตอร์ที่แตกต่างกันหลายแคชในวิธีที่ง่ายมาก
ชื่อ: ตัวระบุแคช
MaxBytesLocalHeap: กำหนดจำนวนไบต์ที่แคชสามารถใช้สำหรับเครื่องเสมือน หากมีการตั้งค่า cacheManager maxbyteslocalheap ขนาดที่กำหนดของแคชจะถูกลบโดย cachemanager แคชอื่น ๆ ที่ใช้ร่วมกัน ค่าของคุณสมบัตินี้คือข้อมูล <gumber> k | K | M | M | G | G ย่อมาจาก Kilobytes (K | K), Megabytes (M | M) หรือกิกะไบต์ (G | G)
นิรันดร์: กำหนดว่าองค์ประกอบเป็นนิรันดร์หรือไม่ หากเป็นกรณีนี้การหมดเวลาจะถูกละเว้นและโครงการจะไม่หมดอายุ
Timetoidleseconds: นี่คือจำนวนวินาทีรายการที่ถูกทิ้งไว้ในการใช้งานล่าสุดค่าเริ่มต้นคือ 0 และองค์ประกอบยังคงอยู่
Timetoliveseconds: นี่คือจำนวนวินาทีที่โครงการอาศัยอยู่ใน Cache.la การสร้างมูลค่าเริ่มต้นคือ 0 และโครงการจะมีชีวิตอยู่ตลอดไป
นโยบายการปล้น MemoryStoreEvictionPolicy: LRU - ใช้อย่างน้อยเมื่อเร็ว ๆ นี้ใช้งาน FIFO - องค์ประกอบแรกที่เก่าแก่ที่สุดโดยการสร้างวันที่
diskexpirythreadIntervalseconds: กระบวนการยึดสังหาริมทรัพย์ควบคุมจำนวนวินาทีระหว่างการรันสองครั้ง
Diskpersistent: อนุญาตให้วัตถุได้รับการกู้คืนระหว่างการแข่งขันสองรายการของเครื่องเสมือนที่เก็บไว้ในดิสก์
OverflowTodisk: กำหนดว่าวัตถุสามารถเก็บไว้ในดิสก์เพื่อให้ได้องค์ประกอบการจัดเก็บสูงสุดหรือไม่
หากต้องการสรุปใช้สูตรทางคณิตศาสตร์อย่างง่าย: expirationTime = Math.min((creationTime + timeToLive),(mostRecentTime + timeToIdle))
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของรหัสแคชฤดูใบไม้ผลิในบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!