Memcached là một hệ thống cache hoạt động bằng cách lưu tạm thông tin những dữ liệu bạn hay sử dụng vào bộ nhớ RAM. Do tốc độ đọc ghi của bộ nhớ bao giờ cũng cao hơn so với lưu trữ file nên việc sử dụng memcached giúp cho hệ thống của bạn tăng tốc lên một cách đáng kể.

Mô hình hoạt động của Memcached:

memcached-architecture

Trong bài viết này, mình sẽ hướng dẫn các bạn cách cài đặt Memcached trên CentOS 7/6/5.

Cài đặt Memcached

– Cài đặt Remi repository với CentOS 5 (CentOS 7 và 6 không cần bước này)

## Remi Dependency on CentOS 5
rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

– Cài đặt Memcached package

## CentOS 7 and 6
yum install memcached

## CentOS 5
yum --enablerepo=remi install memcached

Bạn cần lưu ý là có 2 memcache package tồn tại là memcache và memcached (có thêm chữ d ở cuối) cũng như có 2 phiên bản PHP Extention Module tương ứng là php-pecl-memcache và php-pecl-memcached. Chúng ta sẽ sử dụng phiên bản thứ 2 (có chữ d) vì nó ổn định và hỗ trợ nhiều chức năng hơn.

Cấu hình Memcached

Thông số quan trọng nhất bạn cần lưu ý đó là CACHESIZE, đơn vị tính là MB và MAXCONN. Ví dụ như bên dưới mình sử dụng 128MB để cache (mặc định 64MB). OPTIONS cấu hình bảo mật chỉ cho local connect được tới port 11211 mà thôi.

nano /etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="10240"
CACHESIZE="128"
OPTIONS="-l 127.0.0.1"

Khởi động Memcached

chkconfig memcached on
service memcached start

Để theo dõi tình trạng memcached, các bạn có thể có thể sử dụng phpMemcachedAdmin để xem ngay trên trình duyệt. PHPMemcachedAdmin chỉ cần tải về là có thể sử dụng, nên cài đặt trong thư mục quản lý của HocVPS Script để bảo mật. Cụ thể, mình sẽ cài đặt trong thư mục /home/hocvps.com/private_html/:

cd /home/hocvps.com/private_html/
wget https://github.com/elijaa/phpmemcachedadmin/archive/1.3.0.tar.gz
tar -xvzf 1.3.0.tar.gz
mv phpmemcachedadmin-1.3.0 memcached && chmod -R 777 memcached && chown -R nginx:nginx memcached
rm -f 1.3.0.tar.gz

Giờ bạn có thể truy cập PHPMemcachedAdmin qua domain:port/memcached/

Lưu ý: ở lần truy cập đầu tiên bạn sẽ thấy thông báo “Error : Configuration file or folder is missing, please fix this error and try again“. Bạn vào Editing Configuration rồi Save Live Configuration là xong.

Cài đặt Memcache và Memcached PHP Module

Để Memcached có thể hoạt động được với PHP, chúng ta cần cài đặt thêm PHP module.

PHP 5.5

yum --enablerepo=remi,remi-php55 install php-pecl-memcached php-pecl-memcache

PHP 5.6

yum --enablerepo=remi,remi-php56 install php-pecl-memcached php-pecl-memcache

PHP 7.0

yum --enablerepo=remi,remi-php70 install php-pecl-memcached php-pecl-memcache

PHP 7.1

yum --enablerepo=remi,remi-php71 install php-pecl-memcached php-pecl-memcache

Cuối cùng khởi động PHP và web server

service php-fpm restart
service nginx restart

Mở cổng Memcached (11211) trên Iptables Firewall

Trong trường hợp bạn sử dụng riêng một server để chạy Memcached thì cần phải mở port 11211 trên server cache.

Sử dụng lệnh sau

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 11211 -j ACCEPT

Khởi động lại Iptables Firewall

service iptables restart

Cài đặt Memcached làm Session Handler

Bạn có thể cấu hình PHP sử dụng Memcached làm session handler, thay vì dùng files, để tăng hiệu năng xử lý của hệ thống. Tất nhiên thao tác này chỉ nên thực hiện với các mã nguồn sử dụng nhiều session, WordPress thì không cần.

Mở file cấu hình php.ini

nano /etc/php.ini

Tìm dòng [Session], thay thế session.save_handler = files bằng:

[Session]
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"

Nhấn Ctrl+O để save file, Ctrl+X để đóng editor.

Nếu dùng phpMyAdmin, bạn cần tùy chỉnh cơ chế lưu trữ session của ứng dụng. Chỉnh sửa file session.inc.php của phpMyAdmin:

nano /home/domain.com/private_html/phpmyadmin/libraries/session.inc.php

_Uncomment (bỏ //) dòng: //ini_set('session.save_handler', 'files');
_Thêm dòng : ini_set('session.save_path', '/tmp');

Cuối cùng restart lại PHP

service php-fpm restart

Cài đặt Memcached làm việc với WordPress

Để Memcached có thể hoạt động với WordPress bạn cần sử dụng plugin cache W3 Total Cache.

W3 Total Cache

Trong phần cài đặt plugin, hãy chọn page cache method là Memcached cho các module Page Cache, Database Cache và Object Cache là xong.

Giờ thì hãy tận hưởng tốc độ vù vù mà Memcache đem lại nhé.

Xóa Memcached

Nếu không dùng nữa và muốn xóa hoàn toàn Memcached khỏi server, bạn hãy chạy lệnh bên dưới:

yum remove memcached php-pecl-memcached php-pecl-memcache
service php-fpm restart
service nginx restart

Chúc các bạn thành công!

Comment của bạn

Your email address will not be published. Required fields are marked *

266 Comments

    1. Việt Phương Moderator

      Hai cái này là khác nhau bạn nhé. Memcached là system cache cài trên hệ thống VPS còn WP Rocket là plugin cache của WP. Kỹ thuật cache cũng khác nhau.
      Nếu dùng chung thì thường Memcached với W3 Total Cache hoặc Redis với WP Rocket

      1. nguyen giang 8 comment

        Nếu so sánh về tốc độ thì Memcached với W3 Total Cache hoặc Redis với WP Rocket , cái nào nhanh hơn nhỉ bác ? , có bài nào hướng dẫn cài Redis ko ạ ? Tks bác

  1. Phan 6 comment

    Chào Việt Phương,
    Mình cài memcached như hướng dẫn nhưng sau khi cài xong mở bằng di động thì trắng trang, có cách nào khắc phục không? Mình thử gỡ plug-in W3 Total Cache ra thì không còn lỗi này nữa. Cảm ơn bạn

    1. Việt Phương Moderator

      Mình chưa thấy lỗi nào như vậy rồi. Bạn kiểm tra log thời điểm truy cập bằng mobile xem do vấn đề gì

        1. Việt Phương Moderator

          Thường là PHP. Cách đơn giản nhất là vừa truy cập mobile xong bạn xem file log nào đc ghi mới thì kiểm tra những file ý

  2. Khánh 1 comment

    Hi bác, em đang dùng wp-rocket, có nên cài memcache ko ạ? Em ưu tiên Wp-rocket tại nó có nhiều chức năng. Cảm ơn bác nhé.

    1. Việt Phương Moderator

      Hình như WP-Rocket không có lựa chọn tích hợp trực tiếp với Memcached.

      1. quốc anh 11 comment

        Mình có làm cách này theo hướng dẫn trên trang chủ của wp-rocket để tích hợp Memcached chạy cùng. Không biết có lỗi lầm gì không nhưng hiện giờ mình thấy memcached đã chạy. Mong anh em test thử xem.
        Cách mình làm: mình tải plugin Memcached Redux về rổi tải file object-cache.php lên thư mục wp-content.
        Nguồn: https://docs.wp-rocket.me/article/116-does-wp-rocket-support-memcached

          1. quốc anh 11 comment

            Cám ơn admin nhiều nhé! max tốt bụng :)) Trong hướng dẫn cài đặt của plugin Memcached Redux thì mình thấy có đoạn cài đặt PECL memcached extension mà hình như cái này mình phải cài thêm phải không ạ? Mong admin sớm có câu trả lời 😀

          2. Việt Phương Moderator

            Trong bài hướng dẫn có cài đặt rồi mà. Bạn tham khảo lại nhé

          3. quốc anh 11 comment

            thế là cài rồi à :)) tại mình thấy memcached có hoạt động khi cài cùng với wp rocket rồi mà thấy website vẫn thế, check trên google speed insight cũng không cải thiện điểm nào cả nên mới hơn lăn tăn 🙁 Cám ơn ad nhé!

  3. Hoàng Ngô Tiến 1 comment

    Mình cài đặt xong W3C Total Cache thì nó báo lỗi này

    The following memcached servers are not responding or not running:
    Database Cache: 127.0.0.1:11211.
    Object Cache: 127.0.0.1:11211.
    Page Cache: 127.0.0.1:11211.
    This message will automatically disappear once the issue is resolved.

    Không biết là sai ở đâu nữa, mình cài 2 lần vẫn bị lỗi đó

    1. Luân Trần Admin

      Khả năng chưa cài Memcache và Memcached PHP Module thì phải, bạn kiểm tra lại coi?

  4. Hai 21 comment

    Mình cái hocvps + Memcache
    Tuy nhiên sau khi sử dụng 1 thời gian bị lỗi. Cụ thể lỗi như sau.
    1. Web vẫn nhanh
    2. trang administrator khi click các menu trong này sẽ bị logout.
    Mình xóa memcache và cấu hình lại file config thì chạy bình thường. Mình dùng joomla

    1. Việt Phương Moderator

      Chưa biết cụ thể lỗi rồi. Bạn theo dõi log thời điểm đó để biết thôi.

  5. hong vi 33 comment

    làm sao để biết đã cài đặt memcached thành công ạ!
    mình cài xong khi vào đường dẫn domain:port/memcached/ thì nó ra lại giao diện domain:port
    khi vào domain:port/memcached/op.php/ thì nó báo File not found.

    1. Việt Phương Moderator

      Bạn đọc lại hướng dẫn nhé. Phần domain:port/memcached chỉ là của tool quản lý PHPmemcachedadmin chứ bản chất không phải service memcached
      Bạn kiểm tra service memcached status

        1. Việt Phương Moderator

          Chưa chạy do lỗi. Bạn start nó lên rồi xem thông báo gì. Check cả log nữa

  6. Thanh Sơn 4 comment

    Bước Cài đặt Memcached làm Session Handler khi vào phpmyadmin thì gặp lỗi này là bị gì nhỉ
    Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.
    session_start(): Cannot find save handler 'memcached' - session startup failed

    1. Việt Phương Moderator

      Bạn chỉnh sửa session.inc.php của phpMyAdmin chưa? Xong bị lỗi này?

  7. Viet Hoang 3 comment

    Sau khi cài memcached xong, mình chạy: chkconfig memcached on
    thì báo như này là sao hả Luân?

    Note: Forwarding request to ‘systemctl enable memcached.service’.
    Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.

      1. Viet Hoang 3 comment

        mình đang dùng hocvpsscript
        tuy nhiên mình không thấy đường dẫn: /home/hocvps.com/private_html/
        tại sao vậy bạn?

        1. Viet Hoang 3 comment

          mình loay hoay mãi mới hiểu ra vấn đề của dòng này: /home/hocvps.com/private_html/

          giờ thì ngon rồi hihi 😀

          1. Việt Phương Moderator

            Uhm. Bạn sửa cho đúng với hệ thống của bạn nhé

  8. quốc anh 11 comment

    Error: Package: php-pecl-memcache-3.0.5-4.el6.x86_64 (base)
    Requires: php(api) = 20090626
    Installed: php-common-7.1.7-1.el6.remi.x86_64 (@remi-php71)
    php(api) = 20160303-64
    Available: php-common-5.3.3-49.el6.x86_64 (base)
    php(api) = 20090626

    Em bị gặp lỗi này, không biết cách xử lí sao vậy admin? Cám ơn admin!

  9. quốc anh 11 comment

    http://prntscr.com/g6uj00
    memcached em set bao nhiêu thì nó cũng xài hết bấy nhiêu 🙁 không biết có cách nào khắc phục không ạ? bữa để 64mb rồi, lần này nâng lên 128mb cũng bị ngốn hết. Em cài wordpress trên VPS vultr ram 1GB. Mong admin giải đáp!

    1. Việt Phương Moderator

      Nếu vậy nó đang cached toàn bộ site, có gì bạn lo lắng nhỉ 😕 Bên cạnh đó, bạn đã thử áp dụng memcached làm session handler chưa?

  10. Kiên Nguyễn 13 comment

    Không biết có phải dòng nay không mà chức năng tự động gửi comment khi có độc giả trả lời không hoạt động? Bạn nào biết chỉ giáo với

  11. Long 5 comment

    Cho mình hỏi là Memcached có hỗ trợ SSL không bạn nhỉ?

    Mình thấy trên web của mình có ghi là Page Caching using memcached (SSL caching disabled)

    Mình đang dùng W3 Total Cache

  12. Dong Ha Van 6 comment

    Hi admin, sao mình cài cái phpMemcachedAdmin nhưng khi truy cập nó toàn hiển thị
    HocVPS Script Admin
    Hello, admin
    Thank you for using HocVPS Script!

    1. Việt Phương Moderator

      Bạn đặt source phpMemcachedAdmin đúng vị trí như trong bài hướng dẫn chưa? Và khi đó bạn truy cập phải qua domain:port/memcached/

  13. Maxbong 5 comment

    Sau khi cài PHPMemcachedAdmin và truy cập vào domain:port/memcached/ mình bị lỗi này “All servers from Cluster Default did not respond !”, không biết phải xử lý sao ạ?

    1. Việt Phương Moderator

      mình không có ý tưởng gì về lỗi này. Bạn kiểm tra lại các bước cài đặt và check log php-fpm error

  14. sun 18 comment

    Mình không biết nên thử lệnh iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 11211 -j ACCEPT thì tự dưng không truy cập được nữa

          1. sun 18 comment

            Iptables Firewall mà cái này không chay được cho mã nguồn khác phải không chỉ chay cho wp

          2. Việt Phương Moderator

            Dùng được cho nhiều mã nguồn khác nhau nhé bạn

          3. sun 18 comment

            Thế lạ nhỉ mình kiêm tra thì nó báo đang chạy hết trơn mà khi vào xem thống kê nó lại chăng cache cái gì đúng là bó chim @@

      1. sun 18 comment

        Để từ sáng tới giờ luôn lạ thiệt 😀 kiêm tra check đủ kiểu thấy nó vẫn chạy
        Thao tác các lệnh
        [root@vultr ~]# ps -A|grep memcached
        31910 ? 00:00:01 memcached

        [root@vultr ~]# ps aux | grep memcached
        root 20542 0.0 0.0 112644 968 pts/0 S+ 11:39 0:00 grep –color=auto memcached
        memcach+ 31910 0.0 0.0 325552 1188 ? Ssl 00:39 0:01 /usr/bin/memcached -u memcached -p 11211 -m 1500 -c 1024
        như thê này là nó đang chạy nhỉ

        1. Việt Phương Moderator

          Mình vừa kiểm tra lại thì phiên bản mới PHPMemcachedAdmin cần nhiều quyền hơn. Nên cấu hình hiện tại thì Memcached vẫn hoạt động nhưng trên báo cáo của PHPMemcachedAdmin thì không có gì. Bạn cho full quyền (777) toàn bộ thư mục Memcached nhé.
          Thành công thì nó bắt đầu show thông số như hình: http://prntscr.com/h0vms3

          1. sun 18 comment

            Theo mình cảm nhận thì có vẻ tải tốt hơn chắc nó chạy rồi đấy 😀 để kiêm tra lại cái đó

      2. sun 18 comment

        Quên là mình dùng mã nguồn không phải wp @@ hay cái này dùng được wp thôi nhỉ

  15. khanh 2 comment

    Mình sử dụng google cloud. Mình đã cài hocvps nhưng vào trang đăng nhập control panel web thì không vào được. Đã trỏ tên miền qua hết rồi. Ping thấy qua duoc rồi bạn

    1. Việt Phương Moderator

      Bạn mở port 2222 và port control panel trên GG Cloud nhé. Phần Network