حافظه پنهان چیست؟ چگونه دادههای ذخیره شده در حافظه پنهان سرعت را افزایش میدهند؟
یک پردازندهی مرکزی مدرن میتواند در کمتر از یک نانوثانیه، مقداری را از نزدیکترین حافظهی پنهان خود استخراج کند. رسیدن به حافظهی اصلی برای همان مقدار تقریباً صد برابر بیشتر طول میکشد. بنابراین تراشه کار واضحی انجام میدهد: یک کپی از دادههایی را که احتمالاً به آن نیاز دارد، درست در کنار خود نگه میدارد. آن کپی، حافظهی پنهان است و این ترفند در هر لایه از محاسبات، از سیلیکون موجود در پردازندهی شما گرفته تا سروری که این صفحه را ارائه داده است، تکرار میشود. این راهنما توضیح میدهد که حافظهی پنهان چیست، چگونه عمل میکند، هر جایی که بیسروصدا در آن قرار دارد، و اینکه آیا باید زحمت پاک کردن آن را بکشید یا خیر.
تعریف حافظه پنهان: حافظه پنهان واقعاً چیست؟
حافظه پنهان (cache) یک فضای ذخیرهسازی موقت است. کوچک، سریع و تا حد امکان نزدیک به هر چیزی که به آن نیاز دارد. این حافظه، کپیهایی از دادههایی را که سیستم انتظار دارد دوباره به آنها نیاز داشته باشد، در خود نگه میدارد، بنابراین وقتی زمان مناسب فرا برسد، میتواند به جای انجام مجدد کارهای کند یا پرهزینه، کپی را بازیابی کند. این صفحه را برای بار دوم باز کنید و بخش قابل توجهی از آن از کپیای که از قبل روی دستگاه شما قرار دارد، نه از سرور، بارگیری میشود.
کلمه «موقتی» اینجا بار سنگین را به دوش میکشد. دادههای ذخیرهشده در حافظه پنهان هرگز اصلی نیستند. این دادهها یک کپی هستند که صرفاً برای سرعت نگهداشته میشوند و میتوانید هر زمان که خواستید آنها را حذف کنید. آن را پاک کنید و هیچ چیز ارزشمندی از بین نمیرود. سیستم فقط به منبع اصلی برمیگردد و کپی را دوباره میسازد. موجودی بانکی شما در حافظه پنهان ذخیره نمیشود؛ یک کپی از صفحه وب که این موجودی را نشان میدهد، ممکن است ذخیره شود. این شکاف بین منبع اصلی و یک کپی دور انداختنی، دلیل اصلی ایمن بودن ذخیره همه چیز در حافظه پنهان است. در بدترین حالت، کپی گم شده یا اشتباه است، سیستم بیتفاوت میشود، از منبع اصلی اطلاعات را دریافت میکند و به کار خود ادامه میدهد.
نحوه عملکرد حافظههای پنهان: برخورد، عدم برخورد و حذف حافظه پنهان
هر حافظه پنهانی، در همه جا، بر اساس یک سوال واحد اجرا میشود: آیا من از قبل یک کپی از این دارم؟ بله به معنای پاسخ سریع است. نسخه را ارائه دهید، از مسیر کند صرف نظر کنید، تمام. نه به معنای انجام کار کند یک بار است: از منبع دریافت کنید، نتیجه را برگردانید و یک کپی را در مسیر خروجی نگه دارید تا درخواستهای آینده سریع انجام شوند. این کل مکانیسم است. بقیه، حسابداری پیرامون دو مشکل پیچیده است، یعنی وقتی فضای کافی وجود ندارد چه چیزی را دور بریزید و چگونه از برگرداندن نسخهای که قدیمی شده است جلوگیری کنید.
موفقیت در حافظه پنهان در مقابل از دست دادن آن
پیداش کردی؟ این یه خطای کش هست. نه؟ خطای کش، که باعث میشه به حافظهی پشتیبان کندتر منتقل بشی. به سهم درخواستهایی که به خطا ختم میشن، نسبت خطا میگن و این تنها عددیه که مهندسان واقعاً بررسی میکنن. یه شبکهی تحویل محتوا که فایلهای استاتیک مثل تصاویر و استایلشیتها رو ارائه میده، هدفش ۹۵ تا ۹۹ درصده. اگه این درصد رو بزنی، تقریباً هر بازدیدکنندهای یه کپی نزدیک به خودش دریافت میکنه در حالی که سرور اصلی اونجاست و به سختی بهش دست میزنه. نسبت خطای پایین به این معنیه که کش بیشتر جنبهی تزئینی داره.
وقتی حافظه پنهان پر میشود: سیاستهای اخراج
یک حافظه پنهان عمداً کوچک است. ذخیرهسازی سریع هزینه دارد، بنابراین هرگز جایی برای همه چیز وجود ندارد و وقتی حافظه پنهان پر میشود، چیزی باید برود. قانونی که بازنده را انتخاب میکند، سیاست حذف است. پیشفرض معمول، کماستفادهترین مورد اخیر یا LRU است: هر چیزی را که مدت طولانیتری دستنخورده مانده است، رها کنید، شرط ببندید که آنچه اخیراً نادیده گرفتهاید، همچنان نادیده خواهید گرفت. طرحهای دیگر متفاوت محاسبه میشوند. کماستفادهترین مورد (LFU) میزان دسترسی به هر آیتم را پیگیری میکند. اولین ورودی، اولین خروجی (FIFO) فقط قدیمیترین ورودی را حذف میکند. همان قمار، لباسهای متفاوت. هر سیاستی در واقع حدسی است که در آن کدام نسخه کمتر از دست خواهد رفت.
تازه نگه داشتن کپیها: سیاستهای TTL و نوشتن
یک کپی فقط تا زمانی خوب است که هنوز با منبع مطابقت داشته باشد. بنابراین اکثر حافظههای نهان هر ورودی را با یک زمان ماندگاری یا TTL مهر میکنند: یک شمارش معکوس، که پس از آن کپی به عنوان منقضی شده در نظر گرفته میشود و باید دوباره بررسی یا بازیابی شود. در وب، هدر Cache-Control این ساعت را تنظیم میکند. کتاب قانون RFC 9111 است و دستورالعمل max-age آن اجازه میدهد یک پاسخ تا یک سال یا اگر رقم دقیق را میخواهید، ۳۱,۵۳۶,۰۰۰ ثانیه در حافظه نهان باقی بماند. نوشتنها نیمه دیگر مشکل هستند. نوشتن از طریق نوشتن، ذخیرهها را همزمان در حافظه نهان و منبع انجام میدهد، که ایمن اما کندتر است. نوشتن از طریق نوشتن، ذخیرهها را اکنون در حافظه نهان و بعداً در منبع انجام میدهد، که سریع است اما یک پنجره کوتاه ایجاد میکند که در آن این دو با هم اختلاف نظر دارند. معامله خود را انتخاب کنید.

انواع حافظه پنهان: از CPU تا شبکه تحویل محتوا
این بخشی است که اکثر توضیحات از قلم میاندازند. حافظه پنهان مرورگر و حافظه پنهان L1 CPU مانند دو دنیای متفاوت به نظر میرسند - اما ایده آنها در فواصل مختلف یکسان است. هر لایه کپیهایی از دادههای دیررس را نزدیک به هر چیزی که به آن نیاز دارد، نگه میدارد. اگر از داخل به بیرون نردبان را طی کنید، این الگو در کل مسیر تکرار میشود.
حافظه پنهان: سطوح حافظه پنهان پردازنده L1، L2، L3
سریعترین ذخیرهسازی در خود پردازنده اتفاق میافتد. پردازندههای مدرن دارای سه سطح حافظه پنهان ساخته شده از SRAM هستند، نوعی حافظه که بسیار سریعتر از DRAM مورد استفاده برای حافظه اصلی و بسیار گرانتر در هر بایت است. L1 کوچک و تقریباً فوری است، چند ده کیلوبایت در هر هسته تقریباً در یک نانوثانیه پاسخ میدهد. L2 بزرگتر و کمی کندتر است. L3 از این هم بزرگتر است و بین هستهها به اشتراک گذاشته شده است. Core i9-14900K اینتل با 36 مگابایت از آن عرضه میشود و Ryzen 9 7950X3D AMD حافظه L3 را به 128 مگابایت میرساند. همه اینها برای پوشاندن یک شکاف وجود دارد: گرفتن دادهها از L1 کمتر از یک نانوثانیه طول میکشد، در حالی که حافظه اصلی DDR5 حدود 70 ثانیه طول میکشد، تقریباً صد برابر تفاوت. حافظههای پنهان به این دلیل کار میکنند که برنامهها از همان دادهها و دادههای نزدیک به آن استفاده مجدد میکنند، عادتی که به آن محل مرجع گفته میشود.
| لایه | اندازه معمول | زمان دسترسی معمول | آنچه در خود جای داده است |
|---|---|---|---|
| حافظه نهان پردازنده سطح ۱ (L1) | ۳۲-۸۰ کیلوبایت در هر هسته | ~0.7-1 نانوثانیه | دستورالعملها و مقادیر بعدی |
| حافظه نهان پردازنده سطح ۲ (L2 CPU Cache) | ۰.۵-۲ مگابایت در هر هسته | تقریباً ۳-۴ نانوثانیه | دادههای اخیراً استفادهشده در نزدیکی هسته |
| حافظه نهان پردازنده سطح ۳ (L3 CPU Cache) | ۱۶-۱۲۸ مگابایت اشتراکی | ~10-20 نانوثانیه | دادههای مشترک بین هستهها |
| حافظه اصلی (RAM) | ۸-۶۴ گیگابایت | ~70-100 نانوثانیه | برنامههای در حال اجرا و دادههای فعال |
| حافظه SSD | ۲۵۶ گیگابایت تا ۴ ترابایت | ~50-100 میکروثانیه | فایلها و سیستم عامل |
| گره لبه CDN | متغیر است | حدود ۲۰ میلیثانیه روی شبکه | نسخههای وب نزدیک بازدیدکننده |
| سرور مبدا | متغیر است | ~100-200 میلیثانیه در ناحیه متقاطع | سرچشمه حقیقت |
حافظههای پنهان دیسک، سیستم عامل و برنامهها
بالاتر از سختافزار، نرمافزار حافظههای پنهان (cache) خود را نگه میدارد. سیستم عامل شما دادههای پرکاربرد، مانند فایلهای اخیراً خوانده شده، را در رم اضافی نگه میدارد، بنابراین باز کردن مجدد آنها فوری است. پایگاههای داده نتایج جستجوهای رایج را ذخیره میکنند. برنامهها یک لایه اختصاصی در حافظه داخلی، اغلب Redis یا Memcached، اضافه میکنند که بین برنامه و پایگاه داده آن قرار میگیرد و به درخواستهای تکراری در عرض چند میکروثانیه پاسخ میدهد. این کار مشابه کار CPU است: آنچه داغ است را در فضای ذخیرهسازی سریعتر نگه دارید تا هزینه کندی را دو بار پرداخت نکنید.
ذخیرهسازی سمت سرور و CDN
بیرونیترین لایه به سراسر اینترنت میرسد. وقتی یک وب سرور صفحات نهایی را ذخیره میکند، از بازسازی آنها برای هر بازدیدکننده جلوگیری میکند. یک شبکه تحویل محتوا پا را فراتر میگذارد و این داراییها را روی سرورهای لبهای که در سراسر جهان پخش شدهاند کپی میکند تا هر درخواست از دستگاهی که از نظر فیزیکی در نزدیکی کاربر است پاسخ داده شود. یک درخواست لبهای CDN میتواند در حدود 20 میلیثانیه بازگردد، در حالی که وقتی درخواست باید از قارهها به مبدا برسد، این زمان 100 تا 200 میلیثانیه است. این مدل اکنون بر وب غالب است: تا سال 2024، تقریباً 75 درصد از محتوای شخص ثالث از طریق CDN ارائه میشد.
حافظه پنهان مرورگر: آنچه مرورگر وب شما ذخیره میکند
حافظه پنهان مرورگر، حافظهای است که اکثر مردم در واقع با آن مواجه میشوند. یک سایت را بارگذاری میکنید و مرورگر وب شما بیسروصدا بخشهایی از آن را روی دستگاه شما ذخیره میکند: HTML، stylesheets، اسکریپتها، تصاویر، فونتها. بعداً که برگردید، مرورگر آن فایلها را مستقیماً از دیسک شما میخواند به جای اینکه دوباره آنها را دریافت کند، به همین دلیل است که بازدید دوم از یک صفحه وب سریعتر از بازدید اول باز میشود. لوگوی سایت؟ یک بار دانلود شده و در هر صفحهای که آن را نشان میدهد، دوباره استفاده میشود.
نکتهای که من را به فکر فرو میبرد این است: بیشتر این سرعت بدون استفاده باقی میماند. تا سال ۲۰۲۱، حدود ۹۰.۴ درصد از پاسخهای وب دسکتاپ قابل ذخیره در حافظه پنهان بودند ، با این حال ۵۲ درصد از سایتها هنوز در ممیزی استاندارد ذخیره سازی مرورگر، زیر ۲۵ درصد قرار داشتند. برد همینجا، رایگان، و بیشتر وب از آن عبور میکند. اگر ذخیره سازی را به درستی تنظیم کنید، نتیجه فوری خواهد بود. بازدیدهای مکرر سریعتر میشوند، مصرف داده تلفن همراه کاهش مییابد و سرور مبدا دیگر درخواستهای تکراری را ارسال نمیکند.

مزایای ذخیره سازی: چرا همه چیز را سریعتر می کند
ذخیرهسازی (caching) یک تجارت است. شما کمی حافظه صرف میکنید و ریسک کمی برای ارائه چیزی که کمی قدیمی است را میپذیرید، و در عوض سرعت، بار کمتر و هزینه کمتر دریافت میکنید. این سه مزیت، دلیل نمایش ذخیرهسازی در هر لایه به جای فقط یک لایه است.
سرعت، مزیت آشکار است: ارائه یک کپی از فضای ذخیرهسازی مجاور، از محاسبه مجدد نتیجه یا انتقال آن در سراسر شبکه بهتر است. مزیت دوم، کاهش بار روی منبع است. هر درخواستی که توسط یک حافظه پنهان پاسخ داده میشود، درخواستی است که پایگاه داده یا سرور مبدا هرگز مجبور به مدیریت آن نیست، که این امر سیستمها را در هنگام افزایش ترافیک، در حالت آماده به کار نگه میدارد. مزیت سوم، هزینه تمام شده است: ارائه بایتهای ذخیره شده در حافظه پنهان از یک گره لبه، ارزانتر از تولید مجدد آنها و ارسال آنها از یک سرور مرکزی است و هنگامی که نیاز به دسترسی مکرر به دادهها دارید، این صرفهجویی به سرعت افزایش مییابد.
نتیجهی عملکرد اپلیکیشن که کاربر با آن مواجه میشود، واقعی و قابل اندازهگیری است. تحقیقات گوگل در سال ۲۰۱۸ روی سایتهای موبایل نشان داد که کاهش زمان بارگذاری به میزان یک ثانیه، نرخ تبدیل را تا ۲۷ درصد افزایش میدهد، در حالی که یک مطالعهی گروه Aberdeen در سال ۲۰۱۲ که به طور گسترده به آن استناد میشود، هزینهی یک ثانیه تأخیر را ۷ درصد کاهش در نرخ تبدیل عنوان کرد. صفحات سریعتر، کاربران را در سایت نگه میدارند. ذخیرهسازی (caching) یکی از ارزانترین راهها برای رسیدن به این هدف است.
| نوع حافظه پنهان | جایی که زندگی میکند | چه چیزی را ذخیره میکند | چه کسی آن را اداره میکند؟ | طول عمر معمول |
|---|---|---|---|---|
| حافظه نهان پردازنده (L1/L2/L3) | روی پردازنده | دستورالعملها و دادههای داغ | سختافزار، به صورت خودکار | میکروثانیه |
| حافظه پنهان مرورگر | دستگاه شما | HTML، CSS، JS، تصاویر، فونتها | مرورگر وب شما | ساعت تا یک سال |
| حافظه پنهان برنامه | حافظه سرور برنامه | نتایج پرس و جو، جلسات | توسعهدهندگان (Redis، Memcached) | ثانیهها به ساعتها |
| حافظه نهان سرور / CDN | سرورهای لبه در سراسر جهان | صفحات، رسانهها، پاسخهای API | مالک سایت و CDN | TTL کنترل حافظه پنهان |
| حافظه نهان DNS | سیستم عامل، روتر، حل کننده | جستجوی دامنه به IP | حل کننده DNS | ۵ دقیقه تا ۲۴ ساعت |
آیا باید دادههای ذخیره شده در حافظه پنهان (cache) را پاک کنید، و چه زمانی؟
مردم با پاک کردن حافظه پنهان مانند یک کار طاقتفرسا در چک لیست تعمیر و نگهداری رفتار میکنند. از چک لیست صرف نظر کنید. این در واقع یک ابزار عیبیابی است، نه چیزی بیشتر. بیشتر روزها، دادههای ذخیره شده در حافظه پنهان را همانجا که هستند بگذارید، زیرا بیسروصدا باعث میشود هر سایتی که دوباره بازدید میکنید سریعتر بارگذاری شود.
خب، چه زمانی پاک کردنش ارزش زحمت کشیدن را دارد؟ راستش را بخواهید، فقط سه موقعیت. یک سایت بعد از بهروزرسانی خراب میشود یا مدام یک نسخه کششده قدیمی را نشان میدهد، و آن نسخه قدیمی در کش مرورگر تقریباً همیشه مقصر است؛ پاک کردن کش، دانلود کامل را اجباری میکند. شما در یک کامپیوتر مشترک یا عمومی بودهاید و میخواهید ردپای محلی آنچه را که مشاهده کردهاید پاک شود. یا گوشی شما به آخرین گیگابایت خود رسیده است و به فضای ذخیرهسازی نیاز دارید، زیرا کش مرورگر میتواند بیسروصدا به چند گیگابایت برسد. در غیر این موارد، پاک کردن هیچ فایدهای برای شما ندارد. این کار بازدید بعدی شما از هر سایت را کند میکند در حالی که مرورگر کپیهای خود را بازسازی میکند و چند مرورگر در این فرآیند شما را از سیستم خارج میکنند. چیزی که مردم بیشتر اشتباه میکنند: پاک کردن کش، کوکیها یا رمزهای عبور ذخیره شده شما را حذف نمیکند. این موارد در یک فروشگاه جداگانه قرار دارند و از پاک شدن کش جان سالم به در میبرند، مگر اینکه خودتان برای تیک زدن گزینههای آنها نیز تلاش کنید.
| مرورگر | از کجا حافظه پنهان را پاک کنیم |
|---|---|
| کروم | تنظیمات، حریم خصوصی و امنیت، حذف دادههای مرور، تصاویر و فایلهای ذخیرهشده در حافظه پنهان |
| فایرفاکس | تنظیمات، حریم خصوصی و امنیت، کوکیها و دادههای سایت، پاک کردن دادهها |
| سافاری | تنظیمات، سافاری، پاک کردن تاریخچه و دادههای وبسایت |
| لبه | تنظیمات، حریم خصوصی، انتخاب مواردی که باید پاک شوند |
حافظه پنهان در مقابل کوکیها در مقابل بافر: رفع ابهامات
سه کلمه، مدام گیجکننده، همه در مورد ذخیرهسازی دادهها. هر کدام کار متفاوتی انجام میدهند. حافظه پنهان (cache) کپیهایی از محتوا را نگه میدارد تا دفعه بعد بتوانید سریعتر به آن دسترسی پیدا کنید. کوکی یک یادداشت کوچک است که سایت برای به خاطر سپردن شما به جا میگذارد: یک جلسه ورود به سیستم، یک تنظیم زبان، یک تنظیمات ذخیره شده. کوکی حامل هویت است، نه محتوا. بافر هم متفاوت است. دادهها را در حال انتقال نگه میدارد، مانند چند ثانیه ویدیویی که یک پخش زنده قبل از جایی که تماشا میکنید بارگیری میشود. کوتاهترین راه برای مرتب نگه داشتن آنها: دادههای ذخیره شده برای استفاده مجدد باقی میمانند، کوکی به یاد میآورد که شما چه کسی هستید، و بافر در لحظه استفاده خالی میشود.
نکاتی که باید در مورد حافظه پنهان و ذخیرهسازی در حافظه پنهان به خاطر داشته باشید
وقتی کش را چیزی بیش از «نگه داشتن یک کپی از چیز کند نزدیک به جایی که مورد نیاز است» ندانید، دیگر مانند یک ویژگی سختافزاری به نظر نمیرسد و مانند عادتی به نظر میرسد که در تمام محاسبات، از یک واکشی ۰.۷ نانوثانیهای روی یک پردازنده گرفته تا یک کپی از این صفحه که روی یک سرور لبهای در نزدیکی شهر شما قرار دارد، اجرا میشود. درس عملی، درسی است که وب یاد نگرفته است: بیشتر آن سرعت رایگان است و اکثر سایتها هنوز از آن صرف نظر میکنند. دفعه بعد که یک صفحه قبل از اینکه بتوانید پلک بزنید باز شود، دقیقاً میدانید کدام کپی شما را از این سفر نجات داده است.