ไคลเอนต์ส่งคำสั่ง SQL Query เดียวกันไปยังเซิร์ฟเวอร์ฐานข้อมูล หากคุณเข้าถึงฐานข้อมูลทุกครั้งมันจะนำไปสู่การลดลงของประสิทธิภาพ
แล้วจะปรับปรุงได้อย่างไร?
MyBatis ให้กลยุทธ์สำหรับแคชระดับ 1
ระหว่างการเปิดและปิด SQLSession วัตถุ SQLSession (จริง ๆ แล้วผู้บริหาร) จะรักษาวัตถุแคชไว้ เมื่อสอบถามข้อมูลก่อนอื่นให้ดูว่าข้อมูลมีอยู่จากแคชและหากมีอยู่มันจะถูกเรียกคืนโดยตรง หากไม่มีอยู่ให้ส่งแบบสอบถาม SQL ไปยังฐานข้อมูลจากนั้นจัดเก็บข้อมูลแบบสอบถามลงในแคชและส่งกลับไปยังโปรแกรม
สิ่งนี้จะมีปัญหา:
หากโปรแกรมเปลี่ยนข้อมูลของฐานข้อมูลที่จะตรวจสอบในระหว่างการสืบค้นครั้งแรกและครั้งที่สองมันจะทำให้ข้อมูลการอ่านผิดนั่นคือนั่นคือ
การอ่านที่สกปรกคือ mybatis จริง ๆ จะล้างแคชหลังจากดำเนินการวิธีการ commit () ใน sqlsession ครั้งที่สองที่ฉันไปสอบถามฉันจะยังคงสืบค้นจากฐานข้อมูล
นอกจากนี้คุณยังสามารถเรียกใช้วิธี ClearCache () ของ SQLSession เพื่อล้างแคช
ตัวอย่างเล็ก ๆ :
@Test โมฆะสาธารณะ TestCachelever1 () โยนข้อยกเว้น {SQLSession Session = Factory.opensession (); USERMAPPER MAPPER = SESSION.GETMAPPER (USERMAPPER.CLASS); // คำขอแรกคือการสอบถามผู้ใช้ด้วยผู้ใช้ ID 1 ผู้ใช้ = mapper.finduserById (1); System.out.println (ผู้ใช้); // เปลี่ยนข้อมูลแคชจะถูกล้าง user.setUserName ("yyyy"); mapper.updateUser (ผู้ใช้); session.commit (); // แบบสอบถามที่สองจะค้นหาผู้ใช้ USER2 = mapper.finduserById (1); System.out.println (user2); session.close (); -คำถาม:
หาก SQLSession ถูกปิดแคชจะถูกล้าง คุณใช้แคชเพื่อปรับปรุงประสิทธิภาพได้อย่างไร?
โอเคบทความถัดไปแนะนำแคช MyBatis ระดับ 2 ให้คุณ
ด้านบนเป็นแคชระดับแรกของ MyBatis ที่แนะนำโดย Editor ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!