ممکش(Memchache) برنامه ای است که سمت یک سرور وب نصب و اجرا می شود.
از این نظر که همیشه باید در حال اجرا باشد مانند MySql است ولی برخلاف MySql که برای وبسایت ها وسیله حیاتی است و امروزه هر هاستی حتی برخی هاست های مجانی آن را ارائه می دهند، ممکش این طور نیست و تا یک هاست مجازی یا اختصاصی نگیرید و به قسمت SSH یا اجرای Command دسترسی نداشته باشید خبری هم از ممکش نخواهد بود.
اما چرا ممکش خیلی کم استفاده می شود و بیشتر وبسایت ها حتی نام ممکش به گوششان نخورده چه برسد به این که از آن استفاده کنند!!؟؟
جواب سوال این است که ممکش تنها برای وبسایت هایی مفید است که هم تعداد درخواست های زیادی در واحد زمان و از چندین کاربر آنلاین به سمت سرور میرود که این در وبسایت هایی که از ایجکس(Ajax) زیاد استفاده می کنند و کاربر زیاد دارند مشهود است و هم اینکه در هر درخواستی چندین بار از دیتابیس استفاده می کنند. پس تا وبسایتی این دو شرط را نداشته باشد نیازی هم به ممکش ندارد و حتی اگر وبسایتی هم این دوشرط را داشت باید دید که MySql آن با در دست داشتن منابع مختلف سروری که در اختیار دارد از جمله سرعت هارد و قدرت cpu آیا کشش جوابگویی به آن همه اجرای کواری را دارد یا اینکه باعث مشغول شدن زیاد پردازشگر و معطل کردن درخواست ها می شود که در این حالت نیاز به یک برنامه مانند ممکش دیده می شود که تنها از منبع حافظه اصلی(Ram) که سرعت غیر قابل مقایسه با حافظه جانبی(Hard) که MySql برای نگهداری مقدارها بهره میگیرد دارد استفاده کند و مثلا نتایجی که از اجرای کواری Select از دیتابیس خارج میشود را در مدت زمان کوتاهی نگه دارد تا درخواست های مشابه با اجرای آن کواری از آن نتیجه گذشته استفاده کنند و نیازی به اجرای دوباره آن نباشد.
توضیح بیشتر در مورد ممکش و نحوه کار با آن را ان شاءالله در مطلبی دیگر خواهیم گفت و در اینجا تنها نحوه نصب آن و اشکالاتی که ممکن است در نصب آن رخ دهد را شرح می دهیم.
توجه: ممکش برای کش کردن دادهها در حالت سرورهای توزیع شده مناسب است؛ هرچند در یک سرور واحد نیز به کار میرود؛ اگر سرور توزیع شده ندارید بهتر است از Alternative PHP Cache)APC) استفاده کنید، چون در این حالت سرعت بالاتری دارد. توضیح در مورد APC به همراه نصب را در این لینک آوردهایم.
گام های زیر در سیستم عامل لینوکس نسخه CentOS کاملا تست شده و جواب داده است. دیگر نسخه ها را امتحان نکردم. مگر اینکه دوستان کمک کنند و تجربیات خود را در قسمت نظرات وارد کنند تا این مطلب را رفته رفته ویرایش و کامل کنم
- ابتدا وارد SSH سرور می شویم.
- قبل ار نصب خود ممکش نیاز است که دستورات زیر را اجرا کنیم چون ممکش وابسته است به libevent
cd /usr/local/src
curl -O http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
tar xzvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable
./configure --prefix=/usr/local
make
make install
یا
yum install libevent
- برای نصب ممکش از yum استفاده می کنیم. اما قبل از آن yum را تقویت می کنیم با اجرای دستورات زیر
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.4-1.el4.rf.i386.rpm
rpm -i rpmforge-release-0.3.4-1.el4.rf.i386.rpm
- حال نوبت به نصب خود ممکش میرسد با اجرای تک دستور زیر
yum install --enablerepo=rpmforge memcached
ممکش نصب شد حالا چطور آن را کنترل کنیم:
- تا اینجا ممکش را راه اندازی کردیم ولی هنوز قابل دسترسی از طریق php نیست. برای اینکه بتوانید در کدهای php از طریق توابع تعریف شده ای با ممکش کار کنید لازم است PECL ممکش را نیز به سرورتان اضافه کنید. پس دستور زیر را اجرا کنید
pecl install memcached
یا
cd /usr/local/src/
wget http://pecl.php.net/get/memcache-2.1.2.tgz
tar zxvf memcache-2.1.2.tgz
cd memcache-2.1.2
phpize
./configure
make & make install
- توجه: ممکن است دستور pecl تعریف نشده باشد برای همین از قطعه دستور دوم ناچارید استفاده کنید
- توجه مهم: ممکن است در اجرای هرکدام از دستورات بالا با خطایی شبیه زیر مواجه شوید
configure: error: memcache support requires ZLIB. Use --with-zlib-dir= to specify
prefix where ZLIB include and library are located ERROR: `/var/cache/php-pear/memcache-2.2.5/configure
--enable-memcache-session=yes' failed
پس باید قبل از آن zlib-devel را با دستور زیر نصب کرد
yum install zlib-devel
- توجه مهم: ممکن است در اجرای هرکدام از دستورات بالا با خطایی شبیه زیر مواجه شوید
configure: error: memcached support requires libmemcached. Use --with-libmemcached-dir=<DIR>
to specify the prefix where libmemcached headers and library are located
ERROR: `/tmp/tmpBwSimh/memcached-1.0.1/configure' failed
یا
"memcache.lo" is not a valid libtool object
برای رفع آن پیشنهاد می شود اصلا از شیوه زیر برای نصب pecl مربوطه استفاده کنید (منبع)
cd /usr/src/
wget http://pecl.php.net/get/memcache-2.2.4.tgz
tar -zxvf memcache-2.2.4.tgz
cd memcache-2.2.4
phpize && ./configure --enable-memcache && make
cp modules/memcache.so /usr/lib/php/modules/
در ادامه با اجرای دستور زیر مرحله بعدی نیز تمام می شود
touch /etc/php.d/memcached.ini
echo 'extension=memcache.so' > /etc/php.d/memcached.ini
- فایلی با نام memcache.ini در پوشه احتمالا /etc/php.d سرور اگر نیست ساخته و آن را باز کنید و خط زیر را
extension=memcache.so
اگر نیست وارد آن کنید و اگر هست مطمئن شوید که این خط با علامت ';' شروع نشده باشد وگرنه این علامت را حذف کنید
- توجه: می توانستیم به جای این فایل از php.ini موجود در پوشه احتمالا /etc/ هم استفاده کنیم.
- در نهایت باید Apache سرور ریست شود تا ممکش قابل استفاده در کدهای php شود.
service httpd restart
یا
/etc/init.d/httpd restart
- حال برای اطمینان از موفقیت نصب ممکش کافی است دستور زیر را در php اجرا کنیم
phpinfo();
و بخشی با عنوان Memcache را در خروجی آن مانند شکل زیر بیابیم :
حال در کدهای php می توانید از دستورات اضافه شده برای کار با ممکش مانند دستورات زیر استفاده کنید
$link=memcache_connect ($mcservername,$mcport);
memcache_set($link, $key, $value,MEMCACHE_COMPRESSED, $expire);
$value = memcache_get($link,$key);
memcache_delete($link,$key);
memcache_close($link);
توضیحات تکمیلی :
همانطور که می دانید سشن ها در فایل ذخیره می شوند یعنی باز هم مثل دیتابیس در هارد !!! خوشبختانه ممکش فکر اینجا را هم کرده و اگر ممکش را به درستی نصب کرده باشید و از سشن هم استفاده می کنید می توانید با تغییر دادن دو خصوصیت زیر که در فایل php.ini وجود دارد
session.save_handler = files
session.save_path = "/var/lib/php/session"
به مقدار های زیر
session.save_handler = memcache
session.save_path = "tcp://localhost:11211"
کاری کنید که از این به بعد سشن ها اتوماتیک در Ram خوانده و نوشته شوند که این خود بسیار سرعت را بالا خواهد برد.
برای اثر گذاری این تغییر دوباره مرحله 7 را انجام دهید