~/VibeHandbook
PDF ฟรี

บท 14 · 06

การแคช

แคช () เก็บคำตอบของคำถามที่มีต้นทุนสูง เพื่อที่คุณจะได้ไม่ต้องถามซ้ำอีก ถ้าหน้าแรกของคุณรันคิวรีหนักตัวเดิมซ้ำสำหรับผู้เข้าชมทุกคน ให้แคชผลลัพธ์ไว้ใน Redis เป็นเวลา 60 วินาที แล้วให้บริการทันที

การแคชเป็นการปรับแต่งประสิทธิภาพ ไม่ใช่แหล่งข้อมูลหลัก กับดักคลาสสิกของมือใหม่คือการลืม การล้างค่าแคช (cache invalidation) — สำเนาที่แคชไว้จะเก่าลง และผู้ใช้จะเห็นข้อมูลเก่า กฎง่าย ๆ คือ แคชเฉพาะเมื่อคุณวัดแล้วว่ามีคอขวดจริง และต้องมีกฎที่ชัดเจนเสมอว่าค่าที่แคชไว้จะหมดอายุหรือถูกรีเฟรชเมื่อไหร่

มีกลยุทธ์ที่สะอาดอยู่สองแบบ และการปนกันระหว่างสองแบบนี้คือสาเหตุของบั๊กแคชส่วนใหญ่ การหมดอายุตามเวลา (TTL — Time To Live ตราประทับวันหมดอายุบนค่าที่แคชไว้) บอกว่า "ค่านี้ใช้ได้ 60 วินาที แล้วทิ้งไป" — ง่าย และเหมาะเมื่อข้อมูลที่เก่าเล็กน้อยไม่เป็นอันตราย (จำนวนการเข้าชม ฟีดหน้าแรก) การล้างค่าตามเหตุการณ์ (event-based invalidation) บอกว่า "ลบค่าที่แคชไว้ทันทีที่ข้อมูลต้นทางเปลี่ยน" — ถูกต้อง แต่คุณต้องจำให้ได้ว่าต้องทำแบบนี้ใน ทุก เส้นทางที่มีการเขียนข้อมูล ซึ่งเป็นจุดที่คนมักพลาด เมื่อไม่แน่ใจ ให้เลือก TTL สั้น ๆ ไว้ก่อน เพราะค่าที่เก่าไม่เกินหนึ่งนาทีเป็นบั๊กที่เล็กกว่าค่าที่เก่าตลอดไปเพราะคุณลืมล้างค่าแคชจุดหนึ่ง

อยากได้แบบออฟไลน์?

ดาวน์โหลดหนังสือทั้งเล่มเป็น PDF หรือ EPUB — ฟรี