بعد از این درس دقیقاً چه بلدی؟
- موضوع «Cache-aside» را با زبان ساده برای فرد دیگری توضیح میدهی.
- مثال همین درس را خطبهخط میخوانی و خروجی آن را پیشبینی میکنی.
- کد را تغییر میدهی، نتیجه یا ساختار آن را بررسی میکنی و خطا را مرحلهای اصلاح میکنی.
ویترین و انبار
کالاهای پرمصرف در ویترین نزدیکاند، اما پس از تغییر قیمت باید برچسب ویترین هم بهروز شود.
Cache نسخهای سریعتر از داده را برای مدت یا رویداد مشخص نگه میدارد. کلید، TTL، مالک Invalidation و رفتار هنگام Miss باید از ابتدا روشن باشند.
چرا مهم است؟ این مفهوم یکی از آجرهای مسیر حرفهای PHP است. فعلاً لازم نیست همه جزئیات را حفظ کنی؛ باید دلیل استفاده و اثر هر خط را بفهمی.
اولین تمرین تو: کلید شامل شناسه و نسخه Schema است؛ پس از ویرایش محصول Cache حذف و TTL برای بازیابی خطا تعیین میشود.
اول بفهم، بعد کد بنویس
Cache-aside
برنامه ابتدا Cache و در Miss منبع اصلی را میخواند.
TTL
حداکثر عمر داده Cached را محدود میکند.
Stampede
در انقضای همزمان، درخواستهای زیاد منبع اصلی را هدف میگیرند.
Cache صفحه محصول
کلید شامل شناسه و نسخه Schema است؛ پس از ویرایش محصول Cache حذف و TTL برای بازیابی خطا تعیین میشود.
قطعهها را به ترتیب درست بچین
روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمههای جابهجایی هم میتوانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.
کد را کامل کن و ساختار آن را بررسی کن
این درس وارد قابلیتهای سروری یا حرفهای شده است. برای امنیت سایت، کد دلخواه روی سرور اجرا نمیشود؛ بررسیگر، وجود اجزای ضروری و منطق مورد انتظار را کنترل میکند و راهنمای اصلاح میدهد.
کد را کامل کن و «بررسی ساختار» را بزن.
این مثال خطبهخط چه میگوید؟
فعلاً حفظ نکن؛ هر خط را به یک جمله ساده تبدیل کن.
- 1
<?phpاز اینجا مفسر PHP شروع به خواندن کد میکند.
- 2
$key = "product:v2:$productId";یک مقدار با نام $key نگهداری میشود تا در خطهای بعد دوباره استفاده شود.
- 3
$cached = $redis->get($key);یک مقدار با نام $cached نگهداری میشود تا در خطهای بعد دوباره استفاده شود.
- 4
if ($cached !== false) {یک پرسش درست/نادرست بررسی میشود و مسیر اجرای بعدی را تعیین میکند.
- 5
return json_decode($cached, true, flags: JSON_THROW_ON_ERROR);نتیجه این بخش به محل فراخوانی برگردانده میشود.
- 6
}مرز یک بلوک یا فراخوانی در اینجا باز یا بسته میشود.
- 7
$product = $repository->findOrFail($productId);یک مقدار با نام $product نگهداری میشود تا در خطهای بعد دوباره استفاده شود.
- 8
$redis->setex($key, 300, json_encode($product, JSON_THROW_ON_ERROR));این خط بخشی از منطق اصلی مثال است؛ نامها و علامتها را از راست به چپ، بخشبهبخش بخوان.
- 9
return $product;نتیجه این بخش به محل فراخوانی برگردانده میشود.
راهنماییها مرحلهای هستند؛ اول خودت پیام خطا را بخوان.
راه جلوگیری از Stampede و کلید نسخهدار برای تغییر Schema طراحی کن.
از ساده به چالشی، بدون پرش
یکی از مقدارهای مثال را عوض کن، خروجی را روی کاغذ حدس بزن و سپس بررسی کن.
راه جلوگیری از Stampede و کلید نسخهدار برای تغییر Schema طراحی کن.
سناریوی «Cache صفحه محصول» را با نامهای واضحتر و یک حالت تازه گسترش بده.
این سه اشتباه را انجام نده
Cache بدون برنامه Invalidation
ذخیره داده شخصی زیر کلید مشترک
استفاده از Redis بهعنوان منبع حقیقت بدون طراحی دوام
5 پرسش کوتاه؛ مطمئن شو واقعاً یاد گرفتهای
برای هر پرسش یک پاسخ انتخاب کن. بعد از هر انتخاب، دلیل پاسخ را همانجا میبینی.
TTL چه چیزی را تعیین میکند؟
کدام توضیح، «Cache-aside» را دقیقتر بیان میکند؟
بهترین قدم بعد از خواندن مثال این درس چیست؟
کدام روش نشان میدهد این درس را واقعاً فهمیدهای؟
کدام رفتار احتمال خطا را در همین موضوع بیشتر میکند؟
درس را فقط وقتی تمام کن که کد را تغییر دادهای
دیدن آموزش کافی نیست؛ یک مقدار را تغییر بده، خروجی را پیشبینی کن و بعد اجرا بزن.