کشگذاری یکی از مؤثرترین ابزارها برای بالا بردن سرعت اپلیکیشن است؛ بهجای محاسبه یا واکشی دوبارهٔ یک نتیجه، آن را نگه میداریم و دفعهٔ بعد فوری برمیگردانیم. اما کش یک شمشیر دولبه است؛ اگر بد طراحی شود، کاربر دادهٔ کهنه میبیند یا باگهایی سر میزند که بازتولیدشان دشوار است.
کش در لایههای مختلف اعمال میشود و هر لایه نقش خود را دارد. CDN محتوای ایستا را نزدیک به کاربر نگه میدارد و تأخیر شبکه را کم میکند. کش مرورگر با هدرهای HTTP، از واکشی دوبارهٔ منابع تغییرنکرده جلوگیری میکند. در سمت سرور، Redis نتایج پرهزینهٔ پایگاه داده یا محاسبات سنگین را در حافظه نگه میدارد تا درخواستهای بعدی سریع پاسخ بگیرند.
بزرگترین چالش کش، باطلسازی است؛ یعنی تشخیص اینکه دادهٔ ذخیرهشده دیگر معتبر نیست. دو رویکرد رایج وجود دارد: انقضای زمانی که ساده است اما ممکن است داده را برای مدتی کهنه نگه دارد، و باطلسازی رویدادمحور که هنگام تغییر داده، ورودی کش را فوراً پاک میکند. انتخاب میان این دو به این بستگی دارد که چقدر کهنگی موقت قابل تحمل است.
توصیهٔ ما این است که کش را زودهنگام و بیرویه اضافه نکنید. ابتدا با اندازهگیری، گلوگاه واقعی را پیدا کنید و کش را دقیقاً همانجا بگذارید. یک کلید کش باید همهٔ پارامترهای مؤثر بر نتیجه را در خود داشته باشد وگرنه کاربری دادهٔ کاربر دیگر را میبیند. کش درست، سرعت میآورد؛ کش نسنجیده، باگ.