เมื่อขอข้อมูลจากแหล่งใด ๆ ก็มีความล่าช้าอยู่เสมอ Ping ไปยังเว็บเซิร์ฟเวอร์วัดเป็นมิลลิวินาที เวลาในการเข้าถึงที่เก็บข้อมูลสามารถมีเวลาแฝงในไมโครวินาที ในขณะที่เวลาแฝงของ RAM วัดในวงจรนาฬิกาของ CPU แน่นอนว่าความเร็วแบบนี้คงจะคิดไม่ถึงเมื่อสองสามทศวรรษก่อน แต่ในปัจจุบัน ความเร็วเหล่านี้ไม่เคยเร็วพอ ความเร็วในการเข้าถึงมักเป็นปัญหาคอขวดในด้านประสิทธิภาพ วิธีหนึ่งที่สามารถแก้ไขได้คือการแคช
การแคชเป็นกระบวนการในการจัดเก็บสำเนาชั่วคราวของทรัพยากรในลักษณะที่สามารถเข้าถึงได้เร็วกว่าปกติ มีการใช้งานที่หลากหลายทั้งในซอฟต์แวร์และฮาร์ดแวร์ แคชสามารถทำหน้าที่เป็นแคชสำหรับอ่าน เขียนแคช หรือทั้งสองอย่าง
อ่านแคช
ในข้อมูลแคชการอ่านที่ได้รับการร้องขอก่อนหน้านี้จะถูกเก็บไว้ในแคชเพื่อการเข้าถึงที่รวดเร็วยิ่งขึ้น ในบางสถานการณ์ แคชอาจถูกโหลดไว้ล่วงหน้าด้วยข้อมูลที่อนุญาตให้มีการร้องขอครั้งแรกจากแคช แทนที่จะเป็นเพียงคำขอที่ตามมา
แคชการอ่านที่คุณน่าจะคุ้นเคยมากที่สุดคือแคชของเบราว์เซอร์ ที่นี่เบราว์เซอร์จัดเก็บสำเนาของทรัพยากรที่ร้องขอในเครื่อง ซึ่งหมายความว่าหากและเมื่อโหลดหน้าเว็บใหม่หรือโหลดหน้าที่คล้ายกันซึ่งใช้เนื้อหาเดียวกันมาก เนื้อหานั้นสามารถให้บริการจากแคชแทนที่จะเป็นเว็บเซิร์ฟเวอร์ นี่ไม่เพียงหมายความว่าหน้าเว็บสามารถโหลดเร็วขึ้น แต่ยังช่วยลดการโหลดบนเว็บ เซิร์ฟเวอร์และลดปริมาณข้อมูลที่ผู้ใช้ต้องดาวน์โหลดซึ่งมีความสำคัญต่อการวัดปริมาณข้อมูล การเชื่อมต่อ
RAM เองยังทำหน้าที่เป็นแคชสำหรับอ่านข้อมูลในฮาร์ดไดรฟ์ ในกรณีนี้ ข้อมูลสำหรับโปรแกรมที่กำลังรันอยู่จะถูกโหลดไว้ล่วงหน้าใน RAM เพื่อให้ CPU สามารถเข้าถึงได้เร็วขึ้น ข้อมูลจาก RAM จะถูกแคชเพิ่มเติมไปยังแคชของ CPU แม้ว่ากระบวนการนี้จะซับซ้อนกว่ามาก เนื่องจากแคชของ CPU วัดเป็นเมกะไบต์ไม่ใช่กิกะไบต์
เขียนแคช
แคชการเขียนเป็นแคชที่สามารถดูดซับข้อมูลที่เขียนไปยังอุปกรณ์ที่ช้ากว่าได้ ตัวอย่างทั่วไปของสิ่งนี้คือแคช SLC ใน SSD รุ่นใหม่ แคชนี้ไม่อนุญาตให้อ่านข้อมูลเร็วขึ้น อย่างไรก็ตาม เขียนได้เร็วกว่าการเขียนแฟลช TLC หรือ QLC ที่ประกอบเป็น SSD ส่วนที่เหลือมาก แคช SLC สามารถดูดซับการดำเนินการเขียนด้วยความเร็วสูง และจากนั้นจะทำการโหลดข้อมูลนั้นทันทีที่สามารถทำได้ไปยังแฟลช TLC ซึ่งให้ความหนาแน่นของการจัดเก็บที่ดีขึ้นมาก แต่ยังเขียนได้ช้ากว่ามาก การใช้หน่วยความจำแฟลชในลักษณะนี้จะปรับให้เหมาะสมสำหรับทั้งความเร็วในการเขียนที่รวดเร็วและความหนาแน่นของพื้นที่เก็บข้อมูลสูง
แคชไฮบริด
มีหลายวิธีในการจัดการแคชที่อนุญาตให้ทำหน้าที่เป็นทั้งแคชการอ่านและการเขียน แต่ละวิธีเหล่านี้จัดการกับการดำเนินการเขียนต่างกันและมีข้อดีและข้อเสีย สามตัวเลือกคือ การเขียนรอบ ๆ การเขียนผ่าน และ การเขียนกลับ แคชสำหรับเขียนข้อมูลจะข้ามแคชทั้งหมดเมื่อเขียน แคชการเขียนผ่านจะเขียนไปยังแคช แต่จะถือว่าการดำเนินการเสร็จสมบูรณ์ก็ต่อเมื่อเขียนไปยังที่จัดเก็บข้อมูลเท่านั้น แคชการเขียนย้อนกลับจะเขียนไปยังแคช จากนั้นจึงถือว่าการดำเนินการเสร็จสมบูรณ์ โดยอาศัยแคชในการถ่ายโอนไปยังที่เก็บข้อมูลหากจำเป็น
การเขียนแบบวนรอบจะมีประโยชน์หากคุณคาดว่าจะมีการเขียนปริมาณมากเนื่องจากจะลดการหยุดทำงานของแคชให้เหลือน้อยที่สุด อย่างไรก็ตาม หมายความว่าการดำเนินการที่อ่านข้อมูลใด ๆ ที่เป็นลายลักษณ์อักษรนั้นจะต้องเผชิญกับแคชอย่างน้อยหนึ่งรายการในครั้งแรก แคชการเขียนผ่านการดำเนินการเขียนแคชในทันที หมายความว่าสามารถให้บริการผลลัพธ์จากแคชในครั้งแรกที่มีการร้องขอ เพื่อให้ถือว่าสมบูรณ์ การดำเนินการเขียนจำเป็นต้องเขียนข้อมูลลงในดิสก์ด้วยซึ่งจะเพิ่มความหน่วง แคชการเขียนกลับมีประโยชน์เช่นเดียวกับการเขียนผ่าน ทำให้สามารถให้บริการข้อมูลที่เขียนจากแคชได้ทันที ไม่จำเป็นต้องดำเนินการเขียนเพื่อเขียนลงดิสก์เพื่อให้ถือว่าสมบูรณ์ ซึ่งจะช่วยลดเวลาในการตอบสนองในการเขียนแต่มาพร้อมกับความเสี่ยงที่ข้อมูลจะสูญหายหากแคชมีความผันผวนและไม่เสร็จสิ้นการเขียนข้อมูลกลับไปยังที่จัดเก็บข้อมูลก่อนที่ไฟจะดับ
จะลบข้อมูลออกจากแคชได้อย่างไร?
หนึ่งในปัจจัยจำกัดของแคชคือความจุ แคชขนาดใหญ่ใช้เวลานานในการค้นหา ลบล้างข้อดีของการใช้แคชตั้งแต่แรก เทคโนโลยีหน่วยความจำที่ใช้สำหรับการแคชมักจะมีราคาแพงกว่าหน่วยความจำที่ใช้แคช หากไม่ใช่กรณีนี้ เป็นไปได้ว่าระดับหน่วยความจำนั้นจะเปลี่ยนเทคโนโลยีหน่วยความจำเพื่อปรับปรุงประสิทธิภาพ ปัจจัยทั้งสองนี้หมายความว่าแคชมักจะค่อนข้างเล็ก โดยเฉพาะอย่างยิ่งเมื่อเปรียบเทียบกับสื่อจัดเก็บข้อมูลที่แคชใช้ RAM มีความจุน้อยกว่าที่เก็บข้อมูล และแคชของ CPU มีความจุน้อยกว่า RAM แคช SLC มีความจุน้อยกว่าหน่วยความจำ TLC
ทั้งหมดนี้หมายความว่ามักจะจำเป็นต้องวนข้อมูลออกจากแคชเพื่อเพิ่มพื้นที่ว่างสำหรับข้อมูลใหม่ที่ต้องแคช มีหลากหลายแนวทางในเรื่องนี้ “ใช้บ่อยน้อยที่สุด” ต้องการลบรายการแคชที่มีจำนวนการเข้าถึงต่ำที่สุด สิ่งนี้มีประโยชน์สำหรับการคาดการณ์ว่ารายการใดจะมีผลน้อยที่สุดต่อการพลาดแคชในอนาคตแต่ จะนับรายการที่เพิ่มเข้ามาเมื่อเร็วๆ นี้ด้วยว่ามีจำนวนการเข้าถึงต่ำ ซึ่งอาจนำไปสู่แคช ปั่น.
“ใช้ล่าสุดน้อยที่สุด” ต้องการลบรายการแคชที่ไม่ได้ใช้มาระยะหนึ่งแล้ว ถือว่าไม่ได้ใช้งานอยู่ในปัจจุบัน แต่จะไม่พิจารณาว่ามีการใช้อย่างหนักในช่วงที่ผ่านมาหรือไม่ “ใช้ล่าสุด” ต้องการลบรายการแคชที่ใช้ล่าสุด โดยสมมติว่ามีการใช้แล้วและจะไม่จำเป็นต้องใช้อีก วิธีที่ดีที่สุดโดยทั่วไปคือการรวมกันของทั้งสามโดยแจ้งจากสถิติการใช้งาน
ข้อมูลเก่าและความเสี่ยงด้านความปลอดภัย
ความเสี่ยงหลักของแคชคือข้อมูลที่มีอยู่ในแคชอาจกลายเป็นข้อมูลเก่า รายการแคชจะถือว่าเก่าเมื่อข้อมูลดั้งเดิมได้รับการอัปเดตโดยปล่อยให้รายการแคชล้าสมัย สิ่งสำคัญคือต้องตรวจสอบอย่างสม่ำเสมอว่าสำเนาสดที่ให้บริการยังคงตรงกับสำเนาที่แคชไว้
ในเว็บไซต์โดยเฉพาะ การระบุข้อมูลที่สามารถและไม่สามารถแคชได้เป็นสิ่งสำคัญอย่างยิ่ง ตัวอย่างเช่น การแคชไฟล์ JavaScript ขนาดใหญ่ที่ไม่มีการเปลี่ยนแปลงนั้นทำได้อย่างสมบูรณ์แบบ วิธีนี้ช่วยป้องกันไม่ให้ผู้ใช้ดาวน์โหลดทุกครั้ง และอาจเป็นประโยชน์กับผู้ใช้รายอื่นที่ให้บริการด้วยแคชเดียวกัน คุณไม่สามารถแคชข้อมูลเฉพาะเซสชันได้ ลองนึกภาพว่าจะเกิดอะไรขึ้นหากคุณเรียกดูแอปรับส่งข้อความในขณะที่ลงชื่อเข้าใช้ด้วยตัวของคุณเอง เพียงเพื่อจะพบว่าคุณได้รับข้อความจากผู้ใช้รายอื่นในเวอร์ชันแคช โชคดีที่เว็บเซิร์ฟเวอร์สามารถระบุทรัพยากรที่สามารถและไม่สามารถแคชได้ และปัญหาเหล่านี้เป็นที่รู้จักกันดีโดยทั่วไป ดังนั้นจึงมีปัญหาเล็กน้อยเช่นนี้
บทสรุป
แคชเป็นส่วนหนึ่งของหน่วยความจำที่สามารถจัดเก็บข้อมูลที่ใช้ล่าสุดในวิธีการจัดเก็บข้อมูลที่เข้าถึงได้เร็วกว่าการทำกระบวนการเข้าถึงข้อมูลตามปกติอีกครั้ง โดยทั่วไปแคชจะมีความจุจำกัด ซึ่งหมายความว่าจะต้องนำแคชออกเมื่อแคชเต็ม โดยทั่วไปแคชจะโปร่งใสสำหรับผู้ใช้ ซึ่งหมายความว่าเวลาแฝงเป็นเพียงเครื่องบ่งชี้ว่าผลลัพธ์ถูกส่งผ่านแคช