کش چیست؟
کش: ذخیره موقت داده پرکاربرد نزدیک مصرفکننده؛ سطوح مختلف کش و اصل محلی بودن
کش چیست و چرا؟
کش (Cache) = ذخیره داده در جایی سریعتر و نزدیکتر از منبع اصلی. ایده ساده: «دادهای که یکبار خواندی، دفعه بعد از جای سریع بگیر».
چرا حیاتی؟ اختلاف سرعتها:
| عمل | زمان تقریبی |
|---|---|
| حافظه کش L1 | ~۱ نانوثانیه |
| RAM | ~۱۰۰ نانوثانیه |
| SSD Read | ~۱۶۰ میکروثانیه |
| شبکه همان دیتاسنتر | ~۵۰۰ میکروثانیه |
| شبکه بینقارهای | ~۱۵۰ میلیثانیه! |
دیتابیس روی دیسک = کند؛ کش در RAM = ۱۰۰ برگر سریعتر!
سطوح کش
- مرورگر: HTML/CSS/JS کاربر — HTTP Cache Headers
- CDN: محتوای استاتیک در لبه، نزدیک کاربران
- اپلیکیشن: Redis/Memcached کنار سرویس — نتایج کوئری، Session
- دیتابیس: Buffer Pool داخلی خود DB
قاعده: هرچه «بالاتر» در این هرم، سریعتر — اما نرخ hit پایینتر (داده کمتری جا میشود).
اصول کش خوب
- محلی بودن (Locality): داده پرکاربرد، نزدیک مصرف
- TTL: هر کش باید انقضا داشته باشد — کش بیانقضا = داده کهنه!
- نرخ Hit: درصد پیدا شدن در کش؛ ۹۰٪+ هدف خوب
- اندازه محدود: کش پر → جایگزینی (مبحث بعد: LRU)
چه چیزی را کش کنیم؟
| عالی برای کش ✓ | بد برای کش ✗ |
|---|---|
| داده خواندنی زیاد، نوشتنی کم | داده نوشتنی مکرر |
| پروفایل کاربر، تنظیمات | موجودی حساب! (سازگاری) |
| نتایج جستجوی پرتکرار | داده حساس لحظهای |
| محتوای استاتیک | داده یکبار مصرف |
نکته: کش «شیرینزدگی» مهندسی است — همهجا کش نکنید! هر کش = یک منبع «داده کهنه» بالقوه. اول بپرسید: «آیا چند ثانیه کهنگی قابل تحمل است؟»
جمعبندی
- کش = داده در جای سریعتر؛ اختلاف سرعتها انگیزه
- چهار سطح: مرورگر ← CDN ← اپ ← دیتابیس
- TTL و نرخ Hit، معیارهای سلامت کش
- خواندنیزیاد/نوشتنیکم = کاندید طلایی
این مبحث بخشی از دوره آموزش کامل طراحی سیستم (System Design) است.