0Pricing
PHP Academy · บทเรียน

รูปแบบการทำให้แคชไม่ถูกต้อง

ใช้กลยุทธ์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดการแคชจึงสำคัญใน PHP
  2. Redis ในฐานะแบ็กเอนด์แคชของ PHP
  3. Memcached สำหรับการแคชเซสชันและออบเจ็กต์
  4. รูปแบบการทำให้แคชไม่ถูกต้อง
← กลับไปที่ PHP Academy