CHIA SẺ:

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í dụ như bên dưới mình sử dụng 128MB để cache (mặc định 64MB)

nano /etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="128"
OPTIONS=""

Khởi động Memcached

chkconfig memcached on
service memcached start

Kiểm tra xem Memcached có hoạt động hay không

memcached-tool 127.0.0.1:11211 stats

#127.0.0.1:11211 Field Value
accepting_conns 1
auth_cmds 0
auth_errors 0
bytes 0
bytes_read 14
bytes_written 768
cas_badval 0
cas_hits 0
cas_misses 0
cmd_flush 0
cmd_get 0
cmd_set 0
conn_yields 0
connection_structures 11
curr_connections 10
curr_items 0
decr_hits 0
decr_misses 0
delete_hits 0
delete_misses 0
evictions 0
get_hits 0
get_misses 0
incr_hits 0
incr_misses 0
limit_maxbytes 536870912
listen_disabled_num 0
pid 1232
pointer_size 64
rusage_system 0.000999
rusage_user 0.000000
threads 4
time 1402941264
total_connections 12
total_items 0
uptime 114
version 1.4.4

Chú ý thông số uptime phía cuối, như vậy là memcached đã sẵn sàng hoạt động rồi.

Ngoài ra các bạn có thể sử dụng phpMemcachedAdmin để xem ngay trên trình duyệt.

Cài đặt Memcache và Memcached PHP Module trên CentOS

Để 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

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 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 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!

175 Comments

  1. Vu Kim Son 8

    Hi,

    Mình chạy lệnh sau:

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

    Thì bị lỗi gói package như thế này:

    Error: Package: php-mysql-5.4.45-11.el6.remi.x86_64 (remi)
    Requires: php-pdo(x86-64) = 5.4.45-11.el6.remi
    Removing: php-pdo-5.3.3-48.el6_8.x86_64 (@updates)
    php-pdo(x86-64) = 5.3.3-48.el6_8
    Updated By: php-pdo-5.6.25-1.el6.remi.x86_64 (remi-php56)
    php-pdo(x86-64) = 5.6.25-1.el6.remi
    Available: php-pdo-5.3.3-47.el6.x86_64 (base)
    php-pdo(x86-64) = 5.3.3-47.el6
    Available: php-pdo-5.4.45-10.el6.remi.x86_64 (remi)
    php-pdo(x86-64) = 5.4.45-10.el6.remi
    Available: php-pdo-5.4.45-11.el6.remi.x86_64 (remi)
    php-pdo(x86-64) = 5.4.45-11.el6.remi
    Available: php-pdo-5.6.24-1.el6.remi.x86_64 (remi-php56)
    php-pdo(x86-64) = 5.6.24-1.el6.remi
    You could try using –skip-broken to work around the problem
    You could try running: rpm -Va –nofiles –nodigest

    Bạn cho mình hỏi làm sao fix lỗi này? Thanks!

    1. aTu 1

      muốn cài bản php mới hơn thì phải xóa bản cũ đi trước chứ bạn.
      dùng yum remove php-(*****) đi trước nhé

  2. Vu Kim Son 8

    Hi,

    Báo với bạn là lệnh này mình kiếm thấy trong comment hướng dẫn của bạn:

    yum –enablerepo=remi install php-pecl-memcached php-pecl-memcache

    Chạy dc với Centos 6.8. Ngoài ra, mình đang cấu hình memcached cho Prestashop nên muốn hỏi phần Option:

    # Running on Port 11211
    PORT=”11211″
    # Start as memcached daemon
    USER=”memcached”
    # Set max simultaneous connections to 1024
    MAXCONN=”1024″
    # Set Memory size to 2048 – 4GB(4096)
    CACHESIZE=”2048″
    #Set server IP address
    OPTIONS=”-l 127.0.0.1″

    OPTIONS : Set IP address of server, so that Apache or Nginx web servers can connect to it.

    Vì mình để trống phần option và dùng localhost cho phần IP Address trong Prestashop thì nó không chạy.

    https://www.prestashop.com/forums/topic/455609-problem-with-memcached-prestashop-1610/

  3. Vu Kim Son 8

    Hi,

    Mình cài xong hết thấy đã chạy khi kiểm tra bằng lệnh trong SSH. Nhưng kiểm tra bằng phpinfo thì không thấy chạy.

  4. Vu Kim Son 8

    Hi,

    Mình dùng lệnh sau để reset memcached:

    /etc/init.d/memcached restart

    Khi check lại thì thấy nó đã chạy như config

    # netstat -tulpn | grep :11211
    tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2304/memcached
    udp 0 0 127.0.0.1:11211 0.0.0.0:* 2304/memcached

    nhưng mà setup với Prestashop vẫn bị báo:

    To use Memcached, you must install the Memcached PECL extension on your server. http://www.php.net/manual/en/memcached.installation.php

    Setup trong Prestashop như sau:
    IP Address: 127.0.0.1
    Port: 11211
    Weight: 1

  5. Vu Kim Son 8

    Hi,

    Mình kiểm lại lại bằng lệnh

    htop

    Thấy memcached đã chạy nhưng vẫn không hiểu làm sao chẳng cấu hình dc với Prestashop.

  6. Vu Kim Son 8

    Hi,

    php -i | grep memcach
    PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib64/php/modules/apc.so’ – /usr/lib64/php/modules/apc.so: undefined symbol: pcre_exec in Unknown on line 0
    /etc/php.d/memcache.ini,
    /etc/php.d/z-memcached.ini,
    PHP Warning: Unknown: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone ‘UTC’ for now, but please set date.timezone to select your timezone. in Unknown on line 0
    memcache
    memcache support => enabled
    memcache.allow_failover => 1 => 1
    memcache.chunk_size => 32768 => 32768
    memcache.compress_threshold => 20000 => 20000
    memcache.default_port => 11211 => 11211
    memcache.hash_function => crc32 => crc32
    memcache.hash_strategy => consistent => consistent
    memcache.lock_timeout => 15 => 15
    memcache.max_failover_attempts => 20 => 20
    memcache.protocol => ascii => ascii
    memcache.redundancy => 1 => 1
    memcache.session_redundancy => 2 => 2
    memcached
    memcached support => enabled
    libmemcached version => 1.0.18
    memcached.compression_factor => 1.3 => 1.3
    memcached.compression_threshold => 2000 => 2000
    memcached.compression_type => fastlz => fastlz
    memcached.serializer => igbinary => igbinary
    memcached.sess_binary => no value => no value
    memcached.sess_connect_timeout => 1000 => 1000
    memcached.sess_consistent_hash => no value => no value
    memcached.sess_lock_expire => 0 => 0
    memcached.sess_lock_max_wait => 0 => 0
    memcached.sess_lock_wait => 150000 => 150000
    memcached.sess_locking => 1 => 1
    memcached.sess_number_of_replicas => 0 => 0
    memcached.sess_prefix => memc.sess.key. => memc.sess.key.
    memcached.sess_randomize_replica_read => no value => no value
    memcached.sess_remove_failed => 1 => 1
    memcached.sess_sasl_password => no value => no value
    memcached.sess_sasl_username => no value => no value
    memcached.store_retry_count => 2 => 2
    memcached.use_sasl => no value => no value
    Registered save handlers => files user memcache memcached

    memcached đã chạy rồi mà không biết sao config cho chạy với Prestashop luôn.

  7. Vu Kim Son 8

    Hi,

    Mình đã tự sửa được rồi. Cho mình hỏi thông số cache mình nên cấu hình thế nào là hợp lý nhất nhỉ?

    Thanks

    1. Luân Trần Admin

      Bạn kiểm tra thực tế chạy website xem sử dụng cache dung lượng hết bao nhiêu. Tầm <= 70% - 80% là ok.

  8. Nguyễn Việt Tiến 4

    Anh ơi, anh dùng WP total cach để cache lại trang canhme.com hả. Em sử dụng cùng với memcache, test lại với lần đầu tiên vào trang thấy nó chậm hơn khi truy cập vào trang của anh. Em mới tạo chỉ 2 bài và sử dụng VPS tại DO. Em cám ơn.

      1. Nguyễn Việt Tiến 4

        Em cám ơn anh. Thằng WP Super Cache có sử dụng được memcached ko vậy anh 🙂

        1. Luân Trần Admin

          WP Super Cache không sử dụng Memcache, tuy nhiên dùng với Canh Me ok do blog có rất nhiều comment liên tục, cache database nhiều quá sẽ bị ảnh hưởng, không hiển thị comment mới.
          Do đó, bạn cần test thực tế, cái nào nhanh thì mới dùng.

  9. Nguyễn Việt Tiến 4

    Em đang làm một blog chia sẻ thông tin. Mhư anh nói thì xài WP Total Cache sẽ không tốt cho những trang nhiều comment. Vậy em nghĩ nếu phát triển 1 blog thì nên xài WP Super Cache. Em ko biết là cache của WP Super Cache này xài tài nguyên nào và mình sử dụng VPS nhiều ram hay storage để hỗ trợ vậy anh.
    Em cám ơn.

  10. Binh 1

    Chào Luân, mình đang chạy Lavarel, mong bạn hướng dẫn đôi chút để cài đặt Memcache hoạt động với Lavarel.

  11. Thực 6

    anh cho e hỏi chút
    memcached có thể chạy trên code custom không
    e cài trên centos nhưng website chạy code custom. e không biết tích hợp thế nào để hoạt động được memcached.
    cảm ơn anh

    1. Việt Phương Moderator

      Nếu code custom mình khuyên bạn nên sử dụng Varnish, hiệu quả cao

Comment của bạn

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