فرض کن در یک رستوران شلوغ کار میکنی. هر بار که مشتری آب معدنی یا دسر پرتکرار میخواهد، اگر بروی آشپزخانه، صف میبندد. پس یک سینی کنار صندوق میگذاری و همان چیزهای پرتکرار را آماده نگه میداری. مشتری سریع جواب میگیرد؛ آشپزخانه نفس میکشد. در سیستم به این سینی میگویند Cache.
شغل Cache این است که جوابِ گران را در جای ارزان و سریع نگه دارد. درست استفاده شود، بیشتر بار دیتابیس را جذب میکند. غلط استفاده شود، غذای کهنه میدهی و باگهای «گاهی میشود» میسازی — مشتری یکی قیمت دیروز را میبیند، یکی قیمت امروز را.

جواب چطور به سینی میرسد؟
سه مدل رایج است. فرقشان این است کی مینویسی، کی میخوانی، و اگر سینی وسط کار افتاد چه میشود.
جا تمام شد، یا غذا کهنه شد
سینی بینهایت نیست. باید بدانی چه چیزی را دور بریزی، و تا کی حق داری همان کپی را بدهی.
سه بلای مشهور و پادزهر
کشِ بد از کشِ نبودن خطرناکتر است. این سه تا را اسم بگذار تا وسط حادثه حدس نزنی.
- Stampede: یک Hot Key منقضی میشود و هزاران درخواست همزمان به DB میریزند. پادزهر: فقط یک درخواست بازسازی کند، بقیه صبر کنند یا مقدار کهنه بگیرند؛ TTL را با jitter — نویز تصادفی — بگذار تا همه با هم نمیرند.
- Hot Key: یک پست وایرال، یک کلید. یک Node از Cache میسوزد. پادزهر: همان کلید را روی چند Node کپی کن، یا یک Cache محلی کوچک داخل هر Server بگذار.
- ناسازگاری Cache و DB: ترتیب درست این است: اول DB را بهروز کن، بعد کلید را حذف کن — نه اینکه خودت مقدار تازه را در Cache بنویسی. دو نویسنده همزمان مسابقه میگذارند. TTL تور ایمنی نهایی است.
به زبان ساده
Cache جواب گران را روی سینی کنار صندوق میگذارد تا هر بار تا آشپزخانه — دیتابیس — نروی.
مثال واقعی
صفحه محصول را ۶۰ ثانیه در Redis نگه میداری؛ وقتی قیمت عوض شد کلید را پاک میکنی تا خواندن بعدی تازه بسازد.