รูปแบบการทำให้แคชไม่ถูกต้อง
ใช้กลยุทธ์ cache-aside, write-through และการทำให้แคชไม่ถูกต้องตาม TTL
รูปแบบการทำให้แคชไม่ถูกต้อง เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาที่ยากที่สุด
"ในวิทยาการคอมพิวเตอร์ มีเพียงสองสิ่งที่ยาก: การทำให้แคชหมดสภาพและการตั้งชื่อสิ่งต่าง ๆ" — Phil Karlton การรู้ว่าเมื่อใดและอย่างไรจึงควรทำให้ข้อมูลที่แคชไว้หมดสภาพเป็นเรื่องสำคัญอย่างยิ่ง
การหมดอายุตาม TTL (แบบไม่เชิงรุก)
กลยุทธ์ที่ง่ายที่สุดคือกำหนด TTL และยอมรับว่าแคชอาจส่งข้อมูลเก่าให้ได้ไม่เกินระยะเวลาดังกล่าว เหมาะเมื่อยอมรับความล่าช้าของข้อมูลได้เล็กน้อย
<?php
Cache::put("user:1", $user, 300); // expires in 5 minutes automaticallyการทำให้แคชหมดสภาพแบบเขียนผ่าน
เมื่อคุณอัปเดตข้อมูล ให้ลบหรืออัปเดตคีย์แคชที่เกี่ยวข้องทันที
<?php
function updateUser(int $id, array $data): void {
User::find($id)->update($data);
Cache::forget("user:$id"); // delete cache
// Or re-warm:
Cache::put("user:$id", User::find($id), 300);
}การกำกับป้ายแคช
กำกับป้ายรายการแคชที่เกี่ยวข้อง เพื่อให้คุณทำให้ทั้งกลุ่มหมดสภาพได้พร้อมกัน เช่น รายการแคชทั้งหมดของผู้ใช้คนใดคนหนึ่ง
<?php
// Store with tags:
Cache::tags(["user:1", "posts"])->put("user:1:recent-posts", $posts, 600);
// Invalidate all "user:1" entries:
Cache::tags("user:1")->flush();การทำให้แคชหมดสภาพตามเหตุการณ์
ใน Laravel ให้ใช้เหตุการณ์ของโมเดล Eloquent เพื่อทำให้แคชหมดสภาพโดยอัตโนมัติเมื่อมีการบันทึกหรือลบโมเดล
<?php
class User extends Model {
protected static function booted(): void {
static::saved(fn($u) => Cache::forget("user:{$u->id}"));
static::deleted(fn($u) => Cache::forget("user:{$u->id}"));
}
}แคชแบบอ่านแล้วค่อยเติมด้วยการกำหนดเวอร์ชัน
เพิ่มหมายเลขเวอร์ชันต่อท้ายคีย์แคช การเพิ่มเวอร์ชันจะทำให้รายการที่มีอยู่ทั้งหมดหมดสภาพโดยไม่ต้องลบรายการเหล่านั้น
<?php
$v = Cache::get("user:version", 1);
$key = "user:{$id}:v{$v}";
// To invalidate: increment the version
Cache::increment("user:version");การหมดอายุก่อนกำหนดเชิงความน่าจะเป็น (PER)
เพื่อป้องกันแคชถล่ม ให้คำนวณแคชใหม่ก่อนหมดอายุเล็กน้อยสำหรับคำขอบางส่วน วิธีนี้ช่วยป้องกันไม่ให้แคชหมดอายุพร้อมกันในเซิร์ฟเวอร์ทั้งหมด
การรีเฟรชเบื้องหลัง
งานเบื้องหลังจะเติมรายการแคชที่มีการอ่านบ่อยก่อนหมดอายุ แคชจึงไม่เคยว่างเปล่า ทำให้การอ่านรวดเร็วเสมอ
ให้ข้อมูลเก่าระหว่างตรวจสอบใหม่
ส่งข้อมูลเก่าให้ทันทีขณะรีเฟรชแคชแบบไม่พร้อมกันในเบื้องหลัง ช่วยขจัดช่วงเวลาที่การอ่านช้าลงเนื่องจากแคชไม่พบข้อมูล
การทำให้แคชแบบกระจายหมดสภาพ
ในระบบที่มีเซิร์ฟเวอร์หลายตัว เมื่อเซิร์ฟเวอร์หนึ่งทำให้คีย์แคชหมดสภาพ จะไม่ล้างแคชภายในเครื่องของเซิร์ฟเวอร์อื่นโดยอัตโนมัติ ให้ใช้การเผยแพร่/สมัครรับของ Redis หรือที่จัดเก็บร่วมกันเพื่อกระจายสัญญาณการทำให้แคชหมดสภาพ
ลำดับชั้นของแคช
วางแคชเป็นชั้น ๆ โดยให้แคชภายในกระบวนการบนเครื่อง (APCu) อยู่หน้าแคชแบบกระจาย (Redis) แคชภายในเครื่องเร็วกว่า แต่ต้องทำให้แคชของทุกอินสแตนซ์หมดสภาพเมื่อข้อมูลเปลี่ยนแปลง
สรุป
รูปแบบที่พบบ่อย ได้แก่ การหมดอายุตาม TTL (เรียบง่าย) การลบแบบเขียนผ่าน (แม่นยำ) การกำกับป้าย (จัดกลุ่ม) และการทำให้หมดสภาพตามเหตุการณ์ (อัตโนมัติ) เลือกใช้ตามระดับความสดใหม่ของข้อมูลที่ต้องการเทียบกับความเรียบง่าย
ตรวจสอบความเข้าใจอย่างรวดเร็ว
Cache::tags()->flush() ทำอะไร
คำถามที่พบบ่อย
บทเรียน “รูปแบบการทำให้แคชไม่ถูกต้อง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “รูปแบบการทำให้แคชไม่ถูกต้อง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบการทำให้แคชไม่ถูกต้อง”
ใช้กลยุทธ์ cache-aside, write-through และการทำให้แคชไม่ถูกต้องตาม TTL คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “รูปแบบการทำให้แคชไม่ถูกต้อง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดการแคชจึงสำคัญใน PHP
- Redis ในฐานะแบ็กเอนด์แคชของ PHP
- Memcached สำหรับการแคชเซสชันและออบเจ็กต์
- รูปแบบการทำให้แคชไม่ถูกต้อง