**مِمکَشد** (به انگلیسی: Memcached) یک سامانه حافظه پنهان توزیع‌شده است. این سامانه معمولاً برای افزایش سرعت وب‌سایت‌های استفاده کننده از پایگاه‌داده، با استفاده از ذخیره داده‌ها و اشیا در حافظه اصلی (RAM) برای کاهش تعداد دفعات خواندن داده از منبع داده خارجی (برای نمونه پایگاه‌داده) به کار می‌رود.

تاریخچه
-------

ممکشد در سال ۲۰۰۳ توسط «برد فیتزپاتریک» برای استفاده در لایوجورنال توسعه داده شد.

معماری
------

این سامانه از معماری کارخواه-کارساز استفاده می‌کند. سرورها هر کدام دارای یک آرایه انجمنی شامل مقادیر کلید-مقدار هستند، که کلاینت‌ها این آرایه را پر کرده و از آن استفاده می‌کنند. اندازه کلیدها حداکثر ۲۵۰ بایت، و اندازه مقادیر حداکثر یک مگابایت است.

کلاینت‌ها از کتابخانه‌های سمت کارخواه برای ارتباط با سرورها می‌کنند، که معمولاً سرویس خود را در درگاه ۱۱۲۱۱ ارائه می‌دهند. هر کلاینتی تمام سرورها را می‌شناسد؛ سرورها با همدیگر ارتباط برقرار نمی‌کنند. اگر کلاینتی بخواهد مقدار متناظر با یک کلید را تنظیم کند یا بخواند، کتابخانه کلاینت ابتدا مقدار درهم‌سازی کلید را محاسبه می‌کند تا سروری که باید استفاده شود را تعیین کند. سپس با سرور تماس می‌گیرد. سرور مقدار درهم‌سازی دیگری را برای کلید محاسبه می‌کند تا محل ذخیره‌سازی یا خواندن کلید را محاسبه کند.

سرورها مقادیر را در حافظه اصلی (RAM) کامپیوتر ذخیره می‌کنند. اگر حافظه اصلی یک سرور پر شود، مقادیر قدیمی‌تر را نادیده می‌گیرد؛ بنابراین، کلاینت‌ها باید ممکشد را به عنوان یک حافظه‌نهان گذرا رفتار کنند، و فرض نکنند که هر مقداری که در آن قرار داده شد همواره در آن خواهد ماند. ممکش‌دی‌بی و ممبیس در حالی که با پروتکل ممکشد سازگار هستند، ذخیره‌سازی ماندگار نیز ارائه می‌دهند.

اگر تمام کتابخانه‌های کلاینت از الگوریتم درهم‌سازی یکسان برای مشخص کردن سرور استفاده کنند، آن‌گاه می‌توانند به داده‌های نهان شده یکدیگر دسترسی پیدا کنند؛ که به‌طور آشکار این ویژگی مطلوب است.

یک استقرار معمولاً چندین سرور و چندین کلاینت دارد. با این حال، استفاده از ممکشد در یک کامپیوتر که هم سرور و کلاینت در آن اجرا می‌شوند امکان دارد.

مثال
----

فرض کنید در برنامه تحت وب، یکی از پرس‌وجوهایی که به پایگاه‌داده ارسال می‌شود منابع و زمان زیادی برای اجرا می‌خواهد. از سویی دیگر، نتیجهٔ این پرس‌وجو در اکثر زمان‌ها ثابت است و ممکن است حداکثر ۵ دقیقه یکبار تغییر کند، و همچنین از نظر برنامه‌نویس اشکالی ندارد که کاربر نتایج جدید را با پنج دقیقه تأخیر مشاهده کنند. در این صورت می‌توانیم نتیجه این پرس‌وجو را ابتدا از ممکشد درخواست کنیم، و اگر نتیجه در ممکشد یافت نشد، پرس‌وجوی واقعی را از پایگاه‌داده انجام دهیم و نتیجه را با اعتبار ۵ دقیقه در ممکشد ذخیره کنیم. در این صورت در هر بازه ۵ دقیقه‌ای، تنها یک درخواست به پایگاه‌داده ارسال خواهد شد، و بقیه درخواست‌ها از ممکشد و با سرعت بالا پاسخ داده خواهند شد.

در ادامه، مثال پیاده‌سازی با زبان پی‌اچ‌پی انجام می‌دهیم. برای این‌کار، ابتدا ممکشد را در تعدادی از ماشین‌های سرور نصب و اجرا می‌کنیم. سپس در کد برنامه یک نمونه از شی ممکشد ایجاد می‌کنیم و این سرورها معرفی می‌کنیم:

```
$MEMCACHE\_SERVERS = array(
    "10.1.1.1", //server 1
    "10.1.1.2", //server 2
    "10.1.1.3", //server 3
);

$memcache = new Memcache();
foreach ($MEMCACHE\_SERVERS as $server) {
    $memcache->addServer ( $server );
}

```

سپس می‌توانیم از ممکشد به صورت استفاده کنیم:

```
$result\_of\_slow\_query = $memcache->get("query\_variable\_name");
if ($result\_of\_slow\_query == false) {
   $result\_of\_slow\_query = query\_result\_from\_database();
   // Cache for 5 minutes
   $memcache->set("query\_variable\_name", $result\_of\_slow\_query, 0, 5 \* 60);
}

```

کاربران سرشناس
--------------

از کاربران سرشناس ممکشد می‌توان به وب‌گاه‌های زیر اشاره کرد:

* یوتیوب
* ردیت
* فیس‌بوک
* تویتر
* ویکی‌پدیا

کتابخانه‌های کلاینت در زبان‌های مختلف
-------------------------------------

* جاوا
* پرل
* پی‌اچ‌پی
* پایتون
* روبی

منابع
-----

1. ↑  "Release notes for Release 1.4.20". Retrieved 2014-06-04.
2. 1 2 3  درباره ممکشد
3. 1 2  یادداشت‌ها دپارتمان مهندسی فیسبوک - مقیاس ممکشد در فیس‌بوک
4. ↑  مستندات پی‌اچ‌پی - ممکشد - مقدمه
5. ↑  مستندات چهارچوب توسعه وب جنگو - نهان‌سازی - ممکشد
6. ↑  «مستندات روبی آن ریلز - مبانی ممکشد». بایگانی‌شده از اصلی در 15 اكتبر 2012. دریافت‌شده در 21 اكتبر 2012. تاریخ وارد شده در `|بازبینی=،|archive-date=` را بررسی کنید (کمک)
7. ↑  مستندات ممکشد - آموزش
8. ↑  مقیاس‌پذیری در یوتیوب در یوتیوب
9. ↑  هفت درسی که هنگام گسترش ردیت به 270 میلیون کاربر آموخته شد
10. ↑  وبلاگ تویتر - علم موشک نیست، ولی کار ماست
11. ↑  مدیاویکی - ممکشد

پیوند به بیرون
--------------

* سایت رسمی ممکشد