در حال بارگيري صفحه جديد...
امام علی (ع) : « هر کس به خاطر هر خطایی از برادران کناره گیرد، دوستانش کاهش می‏یابند.»


مطالب
طریقه نصب ممکش(Memcache) در سرور لینوکس

ممکش(Memchache) برنامه ای است که سمت یک سرور وب نصب و اجرا می شود.
از این نظر که همیشه باید در حال اجرا باشد مانند MySql است ولی برخلاف MySql که برای وبسایت ها وسیله حیاتی است و امروزه هر هاستی حتی برخی هاست های مجانی آن را ارائه می دهند،‌ ممکش این طور نیست و تا یک هاست مجازی یا اختصاصی نگیرید و به قسمت SSH یا اجرای Command دسترسی نداشته باشید خبری هم از ممکش نخواهد بود.
اما چرا ممکش خیلی کم استفاده می شود و بیشتر وبسایت ها حتی نام ممکش به گوششان نخورده چه برسد به این که از آن استفاده کنند!!؟؟


جواب سوال این است که ممکش تنها برای وبسایت هایی مفید است که هم تعداد درخواست های زیادی در واحد زمان و از چندین کاربر آنلاین به سمت سرور میرود که این در وبسایت هایی که از ایجکس(Ajax) زیاد استفاده می کنند و کاربر زیاد دارند مشهود است و هم اینکه در هر درخواستی چندین بار از دیتابیس استفاده می کنند. پس تا وبسایتی این دو شرط را نداشته باشد نیازی هم به ممکش ندارد و حتی اگر وبسایتی هم این دوشرط را داشت باید دید که MySql آن با در دست داشتن منابع مختلف سروری که در اختیار دارد از جمله سرعت هارد و قدرت cpu آیا کشش جوابگویی به آن همه اجرای کواری را دارد یا اینکه باعث مشغول شدن زیاد پردازشگر و معطل کردن درخواست ها می شود که در این حالت نیاز به یک برنامه مانند ممکش دیده می شود که تنها از منبع حافظه اصلی(Ram) که سرعت غیر قابل مقایسه با حافظه جانبی(Hard) که MySql برای نگهداری مقدارها بهره میگیرد دارد استفاده کند و مثلا نتایجی که از اجرای کواری Select از دیتابیس خارج میشود را در مدت زمان کوتاهی نگه دارد تا درخواست های مشابه با اجرای آن کواری از آن نتیجه گذشته استفاده کنند و نیازی به اجرای دوباره آن نباشد.
توضیح بیشتر در مورد ممکش و نحوه کار با آن را ان شاءالله در مطلبی دیگر خواهیم گفت و در اینجا تنها نحوه نصب آن و اشکالاتی که ممکن است در نصب آن رخ دهد را شرح می دهیم.

توجه: ممکش برای کش کردن داده‌ها در حالت سرورهای توزیع شده مناسب است؛ هرچند در یک سرور واحد نیز به کار می‌رود؛ اگر سرور توزیع شده ندارید بهتر است از Alternative PHP Cache)APC) استفاده کنید، چون در این حالت سرعت بالاتری دارد. توضیح در مورد APC به همراه نصب را در  این لینک آورده‌ایم.


گام های زیر در سیستم عامل لینوکس نسخه CentOS کاملا تست شده و جواب داده است. دیگر نسخه ها را امتحان نکردم. مگر اینکه دوستان کمک کنند و تجربیات خود را در قسمت نظرات وارد کنند تا این مطلب را رفته رفته ویرایش و کامل کنم

  1. ابتدا وارد SSH سرور می شویم.
  2. قبل ار نصب خود ممکش نیاز است که دستورات زیر را اجرا کنیم چون ممکش وابسته است به 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
  3. برای نصب ممکش از 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
  4. حال نوبت به نصب خود ممکش میرسد با اجرای تک دستور زیر
    yum install --enablerepo=rpmforge memcached
    • توجه: ممکن است با اشکال زیر مواجه شوید
      Error: Missing Dependency: libevent-1.1a.so.1 is needed by package 1: nfs-utils-1.0.9-40.el5.i386 (installed)...
      برای رفع آن دستور زیر را اجرا می کنیم تا برنامه nfs-utils و portmap packages حذف شود (منبع)
      yum remove portmap nfs-utils
    ممکش نصب شد حالا چطور آن را کنترل کنیم:
    • ریست کردن ممکش
      service memcached restart
    • قرار دادن اجرای خود به خود ممکش در هنگام بوت
      chkconfig memcached on
    • اجرای ممکش
      service memcached start
      یا
      memcached -u root -d
    • توقف ممکش
      service memcached stop
      یا
      pkill memcached
    • اطلاع از اجرای ممکش
      ps aux | grep memcached
      که اگر در دو خط مانند زیر خروجی دهد می فهمیم که در حال اجراست
      nobody 11365 0.5 1.8 67972 14596 ? Ssl 07:47 1:33 memcached -d -p 11211 -u nobody
      -c 1024 -m 64 root 23807 0.0 0.0 3912 676 pts/1 S+ 12:59 0:00 grep memcached
  5. تا اینجا ممکش را راه اندازی کردیم ولی هنوز قابل دسترسی از طریق 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
  6. فایلی با نام memcache.ini در پوشه احتمالا /etc/php.d سرور اگر نیست ساخته و آن را باز کنید و خط زیر را
    extension=memcache.so
    اگر نیست وارد آن کنید و اگر هست مطمئن شوید که این خط با علامت ';' شروع نشده باشد وگرنه این علامت را حذف کنید
    • توجه: می توانستیم به جای این فایل از php.ini موجود در پوشه احتمالا /etc/ هم استفاده کنیم.
  7. در نهایت باید Apache سرور ریست شود تا ممکش قابل استفاده در کدهای php شود.
    service httpd restart
    یا
    /etc/init.d/httpd restart
  8. حال برای اطمینان از موفقیت نصب ممکش کافی است دستور زیر را در php اجرا کنیم
    phpinfo();
    و بخشی با عنوان Memcache را در خروجی آن مانند شکل زیر بیابیم :
    memcache in phpinfo
    حال در کدهای 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 را انجام دهید

 

ارتباط با ما

تمامی حقوق این سایت محفوظ و متعلق به شرکت فناوري پوياي شگردها می باشد.

نقل مطالب این سایت تنها با ذکر منبع جایز است.

info[at]shegerdha.ir