Memcached چیست؟ معرفی راهکار هوشمند برای افزایش سرعت سایت
آموزش کامل، مزایا، نحوه عملکرد و تاثیر آن بر سئو سایت


Memcached چیست؟ این راهکار هوشمندانه حکایت تقلب رساندن به سرور است؛ به جای اینکه هر بار سرور از اول همه دادهها را پردازش کند، اطلاعات پرکاربرد و پرتکرار را در حافظه سریع نگه میدارد تا مثل یک دستیار کمکی، پاسخها را در کسری از ثانیه ارائه دهد. در این مقاله، به صورت جامع و کاربردی با Memcached آشنا میشویم و طرز کار آن را بررسی میکنیم. اگر میخواهید سایت یا اپلیکیشنتان مثل برق و باد سریع پاسخگو باشد، تا انتهای مطلب همراه ما باشید.
Memcached چیست؟ معرفی ابزار همهفنحریف برای ذخیره پنهان داده
Memcached یک سیستم کش (Cache) متنباز، سبک و توزیعشده است که دادهها را بهصورت موقت در حافظه RAM ذخیره میکند. هدف اصلی آن افزایش سرعت پاسخگویی برنامهها با کاهش بار روی دیتابیس است. با راهاندازی Memcached، اطلاعاتی که بارها درخواست میشوند (مثل نتایج جستجو، صفحه محصولات یا اطلاعات کاربر)، بهجای اینکه هر بار از دیتابیس خوانده شوند، بهطور مستقیم از حافظه گرفته میشوند.
نحوه عملکرد Memcached؛ ساختار و معماری پشتصحنه
برخلاف دیتابیسهایی که دادهها را روی دیسک یا SSD ذخیره میکنند، Memcached اطلاعات را بهطور کامل در حافظه (RAM) نگه میدارد؛ درنتیجه خبری از تاخیرهای ناشی از جستجوی روی دیسک نیست و دادهها در کسری از ثانیه در دسترس هستند. به بیانی سادهتر، دادههای با تعداد درخواست بالا فقط یک بار بازخوانی و در حافظه ذخیره میشوند. سپس هر زمان که به آن نیاز داشتید، در کسری از ثانیه از RAM برایتان لود خواهد شد. البته این فقط بخشی از ماجراست. در پشت پرده این سرعت، یک معماری هوشمند و منسجم قرار دارد که در ادامه بهصورت کامل آن را بررسی میکنیم:
۱. معماری کلی Memcached
ساختار Memcached براساس مدل کلاینت-سرور (Client-Server) طراحی شده است. یعنی چندین کلاینت (مثل اپلیکیشنهای وب یا موبایل) به یک یا چند سرور Memcached متصل میشوند و دادهها را از آنها میخوانند یا در آنها ذخیره میکنند.
۲. عملیات سمت کلاینت؛ از درخواست تا پاسخ
وقتی کلاینت میخواهد دادهای را ذخیره یا دریافت کند، ابتدا یک کلید (key) را با استفاده از الگوریتم «هشینگ پایدار» (Consistent Hashing) پردازش میکند. این الگوریتم نشان میدهد درخواست به کدام سرور کش ارسال شود. عملیاتهای اصلی در Memcached بهصورت زیر است:
- Delete: حذف یک داده از کش.
- Get: دریافت مقدار مربوط به یک کلید.
- Set: ذخیره یا بهروزرسانی یک جفت کلید-مقدار.
- Add: فقط درصورتیکه کلید وجود نداشته باشد، آن را ذخیره میکند.
- Replace: فقط درصورتیکه کلید وجود داشته باشد، آن را بهروزرسانی میکند.
- Increment / Decrement: افزایش یا کاهش عددی مقدار یک کلید.
۳. عملیات سمت سرور؛ ذخیرهسازی هوشمند در حافظه
Memcached از روشی به نام مدیریت حافظه اسلبی (Slab Allocation) استفاده میکند. حافظه به بخشهای کوچکی به نام اسلب تقسیم میشود که هر کدام از آن برای اندازه خاصی از دادهها بهینه شده است. این ساختار باعث میشود حافظه به شکل بهینه مصرف شود و سرعت پاسخدهی بسیار بالا بماند.
۴. توزیع بار با هشینگ پایدار
در محیطهایی که چندین سرور Memcached فعال است، الگوریتم Consistent Hashing تضمین میکند هر کلید همیشه به همان سرور مشخص ارسال شود. این قابلیت باعث توزیع یکنواخت بار و کاهش اختلال هنگام اضافه یا حذف سرورها میشود.
۵. مدیریت کش؛ حذف و زمان انقضا
وقتی کش پر است، Memcached با استفاده از سیاست LRU قدیمیترین و کماستفادهترین دادهها را پاک میکند. همچنین با قابلیت زمان انقضا (Expiration Time) میتوانید برای هر داده یک زمان مشخص کنید تا پس از آن، بهطور خودکار حذف شود.
۶. مدیریت Cache Miss
اگر دادهای در کش پیدا نشود (Cache Miss)، برنامه داده را از منبع اصلی (مثلا دیتابیس) میخواند و سپس آن را در کش ذخیره میکند تا دفعات بعد سریعتر پاسخ داده شود.
۷. مقیاسپذیری بالا و توزیع بار هوشمند
Memcached بهراحتی مقیاسپذیر است. کافی است سرور جدید اضافه کنید تا با کمک هشینگ پایدار، دادهها بهطور یکنواخت بین سرورها توزیع شوند؛ یعنی بدون افت سرعت، میتوانید سیستم را بزرگتر کنید.
۸. تحمل خطا و سازگاری داده
Memcached دادهها را تکرار نمیکند؛ بنابراین اگر یک سرور از دسترس خارج شود، دادههای آن پاک میشود. به همین دلیل هماهنگی بین کش و دیتابیس اصلی باید توسط اپلیکیشن مدیریت شود.
۹. مانیتورینگ و نگهداری
برای اطمینان از عملکرد صحیح، باید مواردی مثل ترافیک شبکه، مصرف حافظه، نرخ Hit/Miss و تعداد آیتمها را کنترل کنید. ابزارهایی مانند memcached-tool و سیستمهای مانیتورینگ مثل Nagios و Munin در این کار به شما کمک میکنند.
کاربرد Memcached در دنیای واقعی چیست؟
حالا که فهمیدیم Memcached چیست و چطور کار میکند، شاید برایتان این سؤال پیش بیاید که واقعا چه کسی از آن استفاده میکند؟ آیا فقط برای پروژههای کوچک قابل استفاده است یا غولهای فناوری هم به Memcached تکیه دارند؟ در پاسخ باید گفت بزرگترین پلتفرمهای اینترنتی دنیا برای بهبود عملکرد و مقیاسپذیریشان به شدت به Memcached وابسته هستند؛ برای مثال:
Facebook؛ کش کردن دیتای میلیاردی در لحظه
در بازهای که میلیاردها کاربر بهطور همزمان وارد حساب کاربری خود میشوند و عکسها را باز میکنند، فیسبوک برای اینکه بتواند حجم سنگین درخواستها را مدیریت کند، از Memcached استفاده میکند. دادههایی مثل اطلاعات پروفایل، سشنهای کاربر و حتی بخشهایی از تایملاین با Memcached کش میشوند.
Wikipedia؛ صفحات آماده برای بارگذاری سریعتر
جالب است بدانید ویکی پدیا نیز با آن عظمت و تعداد بالای کاربران فعالش برای حفظ سرعت بارگذاری و پاسخگویی از Memcached کمک میگیرد. به این ترتیب با کش کردن صفحات رندر شده و اطلاعات پرتکرار سرور اصلی دیتابیس را از فشار نجات میدهد.
Twitter؛ کش کردن تایملاین کاربران
شبکه ایکس معروف یا همان توییتر سابق نیز برای تجربه کاربری روانتر و تایم لاین سریعتر از ممکشد استفاده میکند. به این ترتیب تایملاین هر کاربر و دیتاهایی که مرتب درخواست میشوند، به دست Memcached میسپارد. البته پروژههای بزرگی روی قابلیتهای Memcached حساب باز کردند فقط به این لیست منتهی نمیشود. سایتهایی همچون پینترست، یوتیوب، اسلک، اینستاگرام و ردیت نیز از Memcached بهره بردند.
استفاده از Memcached فقط مخصوص غولهای فناوری نیست. اگر شما هم وبسایتی دارید که روی وردپرس، لاراول یا هر فریمورک دیگری اجرا شده و با دیتابیس سنگینی کار میکند، فعالسازی Memcached تفاوت چشمگیری در سرعت بارگذاری صفحات و تجربه کاربر ایجاد خواهد کرد. نکته مهم اینجاست: برای استفاده مؤثر از Memcached به سروری نیاز دارید که از این قابلیت پشتیبانی کند. پیشنهاد ما استفاده از سرور مجازی ایران هاست یا سرور ابری با دسترسی کامل است که بهراحتی میتوانید Memcached را روی آن نصب و پیکربندی کنید. همچنین میتوانید نصب ممکشد را به کارشناسان ایران هاست بسپارید. |
کاربردهای اصلی Memcached چیست و چه زمانی از آن استفاده کنیم؟
پس از تمام این بررسیها سوال مهم اینجاست: چه زمانی ممکشد به کارمان میآید. پاسخ این سوال را در ادامه خواهید خواند.
صفحات وب (Web Page Caching) را کش کنید
فرض کنید یک سایت داینامیک دارید که هر بار برای نمایش یک صفحه باید کلی کوئری پیچیده روی دیتابیس اجرا شود. این کار علاوهبر درگیر کردن سرور، باعث کندی سایت نیز خواهد شد. اینجاست که ممکشد به عنوان قهرمان بازی وارد میدان میشود. با ذخیره نتایج این کوئریها یا محاسبات سنگین در حافظه، باعث میشود صفحهها خیلی سریعتر بارگذاری شوند. حتی میتوانید فایلهای استاتیکی مثل HTML، CSS و JavaScript را نیز کش کنید تا بار سرور کم و سرعت سایت بیشتر شود.
برای آگاهی از سایر راهکارهای کاربردی برای بهبود عملکرد سایت، مقاله زیر را از دست ندهید: |
سشن کاربران (Session Management) را مدیریت کنید
در اپهایی که چند سرور دارند یا بهصورت لود بالانسشده کار میکنند، نگهداری اطلاعات سشن کاربر بسیار اهمیت دارد. Memcached این کار را به بهترین شکل انجام میدهد:
- ذخیرهسازی سریع اطلاعات سشن توی حافظه
- دسترسی به اطلاعات کاربر از هر سرور بدون نیاز به دیتابیس
- حفظ پایداری و در دسترس بودن حتی در معماریهای توزیعشده
کش کردن کوئریهای دیتابیس (Database Query Caching)
هر بار که یک کوئری پیچیده اجرا میشود، کلی از منابع دیتابیس مصرف خواهد شد. اگر آن کوئری قرار است چند بار پشت سر هم اجرا شود، بهتر است نتیجه را در کش ذخیره کنید. به این ترتیب، Memcached نتایج کوئریهای پرتکرار را نگه میدارد و سرعت پاسخدهی به درخواستهای کاربر را افزایش میدهد.
کش دادههای اپلیکیشن (Application Data Caching)
برخی از دادهها مثل تنظیمات کلی برنامه یا پروفایل کاربران زیاد تغییر نمیکند، اما بهطور مداوم به آن نیاز دارید. دسترسی به این دادهها از دیتابیس در هر درخواست چندان منطقی نیست. Memcached اینجا وارد عمل شده و دادههای پیکربندی را که زیاد خوانده میشوند اما کم تغییر میکنند، کش کند.
کش پاسخهای API ( یا API Response Caching)
اتصال به APIهای خارجی همیشه با تاخیر همراه است. گاهی نیز محدودیت نرخ (Rate Limit) دارند. چاره آن استفاده از قدرت کاربردی ممکشد است. به این ترتیب، از مصرف بیش از حد درخواست جلوگیری کرده و ارتباط بین سرویسها را در معماری میکروسرویس بهینه میکند.
بیشتر بخوانید: چگونه image برنامه memcached را می توان در Docker دریافت نمود؟ |
تفاوت Memcached با سایر سیستمهای کش چیست؟
در این بخش نگاهی به تفاوت Memcached با سایر سیستمهای کش همچون Memcache و Redis خواهیم انداخت:
مقایسه Memcache و Memcached
فرق Memcache و Memcached چیست؟ در پاسخ باید بگوییم تفاوت Memcached و Memcache حکایت فرق بجنورد و بروجرد است. شاید در نگاه اول هر دو یکی بهنظر برسند اما تفاوتهایی دارند که روی انتخاب نهایی شما تاثیرگذار خواهند بود. Memcache یک نسخه قدیمیتر از ماژول کش برای زبان PHP محسوب میشود. مهمترین ویژگی Memcached این است که تمام دادهها را به شکل رشته (String) ذخیره میکند، فارغ از اینکه نوع اصلی آن داده چه چیزی خواهد بود. یعنی حتی اگر عدد، آرایه یا بولین باشد، Memcache آن را به متن تبدیل میکند.
Memcached نسخه بهروزرسانیشده، قدرتمندتر و کاربردیتر در دنیای برنامهنویسی محسوب میشود. برخلاف Memcache، دادهها را در نوع اصلی خودشان نگه میدارد. برای مثال، عدد، آرایه و بولین را به همان شکلی که هستند ذخیره و بازیابی میکند. علاوهبراین، از نظر عملکردی سریعتر، مقیاسپذیرتر و بهروزتر است.
ویژگی | Memcache | Memcached |
نوع ذخیرهسازی | همه چیز به صورت رشته | ذخیره در نوع اصلی داده |
محبوبیت | کمتر و قدیمیتر | مدرن، سریع و پراستفادهتر |
مناسب برای | پروژههای ساده یا قدیمیتر | اپلیکیشنهای داینامیک و پرسرعت |
پشتیبانی در PHP | نسخهی قدیمیتر PHP extension | نسخهی جدید و پیشرفتهتر |
مقایسه Memcached با Redis
در مقایسه Redis و Memcached باید بگوییم هر دو ابزار محبوب برای کش کردن داده در حافظه محسوب میشود. Memcached گزینهای سبک، سریع و ساده برای ذخیرهسازی موقت دادهها به صورت key-value است و اغلب برای پروژههایی با نیازهای کش پایه مناسب است. در مقابل، Redis یک ابزار قدرتمند و چندمنظوره است که علاوهبر کش، نقش دیتابیس، صف پیام، سیستم تحلیل لحظهای و موارد دیگر را ایفا میکند؛ چون از ساختارهای داده متنوع و امکانات پیشرفتهتری مثل persistency، replication و pub/sub برخوردار است.
در پاسخ به اینکه تفاوت ردیس و Memcached چیست، به سادگی میتوانید با یک نگاه تفاوتهای این دو ابزار را در جدول زیر مشاهده کنید.
مقایسه | Memcached | Redis |
سادگی یا پیچیدگی؟ | فوقالعاده ساده و سبک | پرامکانات و منعطف |
ساختار دادهها | فقط key-value ساده | انواع ساختار داده پیشرفته |
قابلیتهای اضافی | ندارد | دارد (Replication، Persistence و…) |
موارد استفاده | کش ساده و سریع | دیتابیس، پیامرسانی، تحلیل آنی و… |
نصب و راهاندازی | بسیار راحت | نیازمند تنظیمات بیشتر |
نصب و راهاندازی Memcached در لینوکس
پیش از نصب Memcached نیاز است مطمئن شویم سرور آماده اجرای این فرایند است یا خیر. برای شروع نیاز است یک سرور Ubuntu 20.04 در اختیار داشته باشید که:
- دسترسی به کاربر با دسترسی sudo داشته باشید.
- فایروال فعال و روی سرور تنظیم شده باشد.
مرحله اول: نصب Memcached روی اوبونتو
برای نصب Memcached روی سرور با دستور زیر آغاز کنید:
۱. بهروزرسانی لیست پکیجها
sudo apt update |
۲. نصب پکیج اصلی Memcached
sudo apt install memcached |
۳. نصب ابزارهای مدیریتی (اختیاری اما کاربردی)
sudo apt install libmemcached-tools |
۴. بعد از نصب، برای اجرای Memcached فقط کافیاست دستور زیر را وارد کنید:
sudo systemctl start memcached |
مرحله دوم: پیکربندی Memcached
اگر برایتان سوال است که چگونه به سرویس Memcached کاربر مشخصی اضافه کند تا فقط همان فرد اجازه اتصال داشته باشد، نیاز است با مفهومی به نام SASL آشنا شوید. SASL یا Simple Authentication and Security Layer یک چارچوب امنیتی برای تایید هویت کاربران است که امکان میدهد تا رمز عبور و نام کاربری برای Memcached تعریف و دسترسیها را کنترل کنیم. با فعالسازی SASL، فقط کاربرانی که نام کاربری و رمز صحیح داشته باشند، به Memcached وصل خواهند شد.
۱. نصب ابزار SASL
sudo apt install sasl2-bin |
۲. ایجاد پوشه و فایل تنظیمات SASL برای Memcached
sudo mkdir -p /etc/sasl2 sudo nano /etc/sasl2/memcached.conf |
محتوای زیر را در فایل بنویسید:
log_level: 5 mech_list: plain sasldb_path: /etc/sasl2/memcached-sasldb2 |
۳. ساخت کاربر تایید شده
sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy |
در ادامه، دسترسیهای مناسب را به این فایل میدهیم:
sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2 |
مرحله سوم: فعالسازی SASL در تنظیمات Memcached
برای اینکه Memcached از SASL استفاده کند، باید فایل پیکربندی را ویرایش کنیم:
sudo nano /etc/memcached.conf |
در انتهای فایل این خط رو اضافه کنید:
-S |
سپس خط مربوط به خروجیهای کامل لاگ (برای بررسی) را هم از حالت کامنت خارج کنید:
-vv |
فایل را ذخیره و خارج شوید.
مرحله چهارم: راهاندازی دوباره Memcached و بررسی لاگها
در چهارمین مرحله از آموزش نصب مقاله «Memcached چیست؟» باید Memcached را ریاستارت کنیم:
sudo systemctl restart memcached |
برای اطمینان از اینکه SASL فعال شده، دستور زیر را وارد میکنیم:
sudo journalctl -u memcached | grep SASL |
اگر خروجی مشابه پیغام زیر دریافت کردید یعنی کارتان درست پیش رفته است:
Output Sep 23 17:00:55 memcached systemd-memcached-wrapper[2303930]: Initialized SASL. |
مرحله پنجم: بررسی اتصال با و بدون احراز هویت
در این مرحله میخواهیم مطمئن شویم آیا میتوان بدون لاگین به Memcached متصل شد یا خیر.
memcstat –servers=”۱۲۷.۰.۰.۱″ |
اگر هیچ خروجی نگرفتید و با دستور زیر مقدار ۱ برگشت خورد:
echo $? |
یعنی ورود بدون احراز هویت ناموفق بوده است؛ دقیقا همان چیزی که ما میخواستیم.
کلام پایانی؛ Memcached، شتابدهندهای سبک اما قدرتمند
Memcached چیست؟ پاسخ را بهطور کامل در این مقاله بررسی کردیم. Memcached با عملکرد فوقالعاده سریع، ساختار ساده کلید-مقدار و مصرف ناچیز منابع، یک انتخاب محبوب برای پیادهسازی کش در سمت سرور است. هرچند محدودیتهایی مانند ناپایداری دادهها یا نبود قابلیت رمزنگاری دارد، اما برای بسیاری از کاربردهای روزمره از جمله کش کردن نتایج دیتابیس یا Sessionها، گزینهای ایدهآل و کارآمد به شمار میرود.
منابع: digitalocean، scalegrid.io