MyBatis มีคุณสมบัติแคชแบบสอบถามที่ทรงพลังมากซึ่งสามารถกำหนดค่าและปรับแต่งได้ง่ายมาก โดยค่าเริ่มต้นแคชจะไม่เปิดใช้งาน ในการเปิดใช้งานแคชระดับ 2 คุณต้องเพิ่มบรรทัดในไฟล์การแมป SQL ของคุณ:
<แคช/>
นั่นคืออย่างแท้จริง ผลกระทบของคำสั่งง่าย ๆ นี้มีดังนี้:
1. คำสั่ง SELECT ทั้งหมดในไฟล์คำสั่งการแมปจะถูกแคช
2. แผนที่ทั้งหมดแทรกอัปเดตและลบคำสั่งในไฟล์คำสั่งจะรีเฟรชแคช
3. แคชจะถูกลองใหม่โดยใช้อัลกอริทึมที่ใช้น้อยที่สุดเมื่อเร็ว ๆ นี้ (LRU ซึ่งใช้น้อยที่สุด)
4. ตามตารางเวลา (เช่นไม่มีช่วงเวลาการล้างไม่มีช่วงเวลาการรีเฟรช) แคชจะไม่ถูกรีเฟรชตามลำดับเวลาใด ๆ
5. แคชเก็บ 1024 การอ้างอิงไปยังคอลเลกชันรายการหรือวัตถุ (โดยไม่คำนึงถึงสิ่งที่วิธีการสอบถามกลับมา)
6. แคชจะได้รับการพิจารณาว่าเป็นแคชอ่าน/เขียน (อ่านได้/เขียนได้) ซึ่งหมายความว่าการดึงวัตถุไม่ได้แชร์และสามารถแก้ไขได้อย่างปลอดภัยโดยผู้โทรโดยไม่รบกวนการแก้ไขที่อาจเกิดขึ้นจากผู้โทรหรือเธรดอื่น ๆ
คุณสมบัติทั้งหมดเหล่านี้สามารถแก้ไขได้โดยคุณสมบัติขององค์ประกอบแคช ตัวอย่างเช่น:
<cache eviction = "fifo" flushinterval = "60000" size = "512" readonly = "true"/>
การกำหนดค่าขั้นสูงนี้จะสร้างแคช FIFO และรีเฟรชทุก ๆ 60 วินาทีจัดเก็บ 512 การอ้างอิงไปยังวัตถุผลลัพธ์หรือรายการและวัตถุที่ส่งคืนถือว่าเป็นแบบอ่านอย่างเดียวดังนั้นการปรับเปลี่ยนระหว่างผู้โทรในเธรดที่แตกต่างกันส่งผลให้เกิดความขัดแย้ง
กลยุทธ์การดึงข้อมูลที่มีอยู่คือ:
ค่าเริ่มต้นคือ LRU
Flushinterval สามารถตั้งค่าเป็นจำนวนเต็มบวกใด ๆ และพวกเขาเป็นตัวแทนระยะเวลามิลลิวินาทีที่เหมาะสม ไม่ได้ตั้งค่าเริ่มต้นนั่นคือไม่มีช่วงเวลาการรีเฟรชและแคชจะถูกรีเฟรชเฉพาะเมื่อมีการเรียกคำสั่ง
ขนาด (จำนวนการอ้างอิง) สามารถตั้งค่าเป็นจำนวนเต็มบวกใด ๆ โดยจดจำจำนวนวัตถุที่คุณแคชและจำนวนแหล่งข้อมูลหน่วยความจำที่มีอยู่ในสภาพแวดล้อมการทำงานของคุณ ค่าเริ่มต้นคือ 1024
คุณสมบัติแบบอ่านอย่างเดียวสามารถตั้งค่าเป็นจริงหรือเท็จ แคชแบบอ่านอย่างเดียวส่งคืนอินสแตนซ์เดียวกันของวัตถุแคชไปยังผู้โทรทั้งหมด ดังนั้นวัตถุเหล่านี้ไม่สามารถแก้ไขได้ สิ่งนี้ให้ข้อได้เปรียบด้านประสิทธิภาพที่สำคัญ แคชที่อ่านได้และเขียนได้ส่งคืนสำเนาของวัตถุแคช (โดยการทำให้เป็นอนุกรม) สิ่งนี้จะช้าลง แต่ปลอดภัยดังนั้นจึงเป็นเท็จโดยค่าเริ่มต้น
ใช้แคชที่กำหนดเอง
นอกเหนือจากวิธีแคชที่กำหนดเองเหล่านี้คุณยังสามารถแทนที่พฤติกรรมแคชอย่างสมบูรณ์โดยการใช้แคชของคุณเองหรือสร้างอะแดปเตอร์สำหรับสถานการณ์แคชบุคคลที่สามอื่น ๆ
<cache type =” com.domain.something.mycustomcache”/>
ตัวอย่างนี้แสดงวิธีใช้การใช้งานแคชแบบกำหนดเอง คลาสที่ระบุโดยแอตทริบิวต์ประเภทจะต้องใช้อินเตอร์เฟส org.mybatis.cache.cache อินเทอร์เฟซนี้เป็นหนึ่งในอินเทอร์เฟซที่ซับซ้อนหลายอย่างในกรอบ MyBatis แต่ก็เป็นเรื่องปกติที่จะให้สิ่งที่มันทำ
แคชอินเตอร์เฟสสาธารณะ {String getId (); int getsize (); เป็นโมฆะ putobject (คีย์วัตถุค่าวัตถุ); วัตถุ getObject (ปุ่มวัตถุ); Boolean Haskey (Key Object); Object RemoveObject (ปุ่มวัตถุ); เป็นโมฆะชัดเจน (); ReadWriteLock getReadWriteLock (); - แคชอ้างอิง
บางทีในอนาคตคุณจะต้องแบ่งปันการกำหนดค่าแคชและอินสแตนซ์เดียวกันในเนมสเปซ ในกรณีนี้คุณสามารถใช้องค์ประกอบแคชรีฟเพื่ออ้างอิงแคชอื่น
<cache-ref namespace =” com.someone.application.data.somemapper”/>