memcached یک سیستم کش آزاد و اپنسورس است که با کاهش لود دیتابیس سرعت دسترسی به وبسایتهای داینامیک یا برنامهها را افزایش میدهد. این برنامه رکوردهای دیتابیسی که امکان کش شدن دارند را برای استفاده در کوئری های بعد در حافظه RAM نگهداری میکنند.
عملکرد: حالتی را تصور کنید که برنامه یا وبسایت شما دادههایی در پایگاه داده دارد که در بازه زمانی کوتاه تغییر نمیکند (مثلا پستهای وبلاگ شما) پس چه لزومی دارد که هر بار با ارسال جستجو به پایگاه داده بار اضافه به روی پایگاه داده تحمیل کنیم و از طرفی سرعت وبسایت و یا برنامه را افزایش دهیم. برنامه memcached به عنوان واسطی بین برنامه شما و پایگاه داده مقادیر را به صورت کلید مقدار در حافظه رم نگهداری میکند و شما قبل از ارسال درخواست به پایگاه داده بررسی میکنید که آیا مقدار مورد درخواست شما در memcached وجود دارد یا خیر در صورت موجود بودن اطلاعات را از ممکشد دریافت میکنید. در غیر این صورت مقدار را در کش memcahched برای استفاده بعدی دخیره میکنیم.
نصب و راه اندازی با php در سنتاواس:
ابتدا مخزن EPEL را به لیست مخازن سیستم اضافه میکنیم.
#rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
سپس با دستور زیر memcached و php-pecl-memcache و memcached-selinux را نصب میکنیم.
#yum install memcached php-pecl-memcache memcached-selinux
سپس فایل تنظیمات را ویرایش میکنیم.
#nano /etc/sysconfig/memcached
و فایل را به شکل زیر ویرایش میکنیم.
PORT="11211" USER="memcached" # max connection 2048 MAXCONN="2048" # set ram size to 2048 - 2GiB CACHESIZE="4096" # listen to loopback ip 127.0.0.1, for network connection use real ip e.g., 10.0.0.4 OPTIONS="-l 127.0.0.1"
با دستورات زیر memcached را راه اندازی میکنیم.
# chkconfig memcached on # service memcached start
سپس کد پیاچپی پروژه خود را به شکل زیر ویرایش میکنیم.
$MEMCACHE_SERVERS = array( "10.1.1.1", //web1 "10.1.1.2", //web2 "10.1.1.3", //web3 ); $memcache = new Memcache(); foreach($MEMCACHE_SERVERS as $server){ $memcache->addServer ( $server ); } $huge_data_for_front_page = $memcache->get("huge_data_for_front_page"); if($huge_data_for_front_page === false){ $huge_data_for_front_page = array(); $sql = "SELECT * FROM hugetable WHERE timestamp > lastweek ORDER BY timestamp ASC LIMIT 50000"; $res = mysql_query($sql, $mysql_connection); while($rec = mysql_fetch_assoc($res)){ $huge_data_for_frong_page[] = $rec; } // cache for 10 minutes $memcache->set("huge_data_for_front_page", $huge_data_for_front_page, 0, 600); } // use $huge_data_for_front_page how you please
ابتدا آیپیهای سرورهای memcached را در آرایه مشخص میکنیم. سپس یک نمونه جدید از memcache میسازیم و سرورها را memcache معرفی میکنیم. در نهایت بررسی میکنیم اگر دیتایی با کلید huge_data_for_front_page در memcache وجود داشت دیتا را دریافت میکنیم (یعنی اطلاعات قبلا درخواست شده و در کش ذخیره شده) در غیر اینصورت از پایگاه داده کوئری میگیریم و نتیجه را در پایگاه داده ذخیره میکنیم. مدت زمان باقی ماندن کش را بروی ۶۰۰ ثانیه و یا ده دقیقه تنظیم میکنیم.
memcached و سیاماس ها: بسیاری از سیاماسهای آزاد و متنباز به صورت پیشفرض و یا با کمک پلاگین میتوانند با memcached کار کنند.
برای وردپرس باید پلاگین memcached نصب شود.
کاربران دروپال با استفاده از پلاگین memcached میتوانند از ممکشد استفاده کنند.
ویکیمدیا به صورت پیشفرض از ممکشد پشتیبانی میکند.
امنیت: memcached هیچ مکانیزم امنیتی برای تایید کاربران ندارد! هر کاربری با دانستن شماره پورت و آدرس سروری که memcached روی آن در حال اجراست میتوانند براحتی به دیتابیس شما دسترسی پیدا کند و اطلاعات شما را پاک کند، تغییر دهد و یا سرقت کند. بنابراین در هنگام راهاندازی باید سیستم را با دیواره آتش امن کرد پورت memcached را از پورت پیش فرض ۱۱۲۱۱ به پورت ناشناس دیگری تغییر داد و همچنین دسترسی به سرور و پورت را از خارج سیستم و شبکه مسدود کرد.
برنامههای جانبی: با استفاده از برنامه memcached-tool IP_ADDRESS:Port میتوان وظعیت memcached را در سرور مشاهده کرد.
memcached-tool 127.0.0.1:11211
MemcacheDB: یک دیتابیس بر پایه memcached است که امکان ذخیره سازی اطلاعات را بصورت پایا فراهم کرده.
اطلاعات بیشتر را در سایت پروژه بخوانید.
5 دیدگاه. دیدگاه تازه ای بنویسید
میشه در مورد APC و Xcache هم مطلب بذارید؟
مطلب بعدی در مورد APC خواهد بود.
سلام
آیا memcached قابل راه اندازی در هر سرورس هست؟
پرستاشاپ هم به صورت پیش فرض این قابلیت را دارد که قابل فعال سازی است
بیشتر CMS ها پلاگین برای memcached دارند. در صورتی که CMS پلاگین نداشته باشه به راحتی میشه پلاگین براش نوشت.
لینک هایه مخزن EPEL مشکل دارند