Memcached là gì?

Memcached (Mem-Cache-D) là hệ thống phân phối và lưu trữ bộ nhớ đệm (cache) chứa dữ liệu trên RAM. Memcached là một phần mềm mã nguồn mở và miễn phí chủ yếu dùng để làm bộ nhớ đệm nhằm tăng tốc các ứng dụng web.

Một số ứng dụng nổi tiếng đang sử dụng Memcached như:

    • LiveJournal
    • Wikipedia
    • Flickr
    • Bebo
    • Twitter
    • Typepad
    • Yellowbot
    • Youtube
    • WordPress.com
    • Craigslist
    • Mixi

Một số thông tin về Memcached:

    • Người phát triển ban đầu: Danga Interactive
    • Ngày phát hành đầu tiên: Ngày 22 tháng 5, năm 2003
    • Ngôn ngữ phát triển: C
    • Bản quyền : Revised BSD license
    • Website : memcached.org

Nguyên lý hoạt động của Memcached

Nguyên lý hoạt động của Memcached khá đơn giản: Giả sử ứng dụng của bạn có kết nối đến Memcached, khi nhận được một truy vấn có yêu cầu lấy dữ liệu nào đó, thì ứng dụng sẽ kiểm tra xem có lưu trong Memcached hay không, nếu có nó sẽ lấy dữ liệu đã lưu và trả về cho user (rất nhanh vì không truy xuất từ bộ nhớ, giảm tải CPU vì không phải tính toán để tạo ra đối tượng). Nếu đối tượng chưa được lưu trong Memcached thì nó truy vấn đến CSDL, tính toán để tạo ra đối tượng, lưu lại và Memcached rồi trả về cho user, và các yêu câu sau thì chỉ việc lấy kết quả từ Memcached.

Ưu điểm của Memcached

    • Memcached sử dụng RAM làm nơi lưu trữ dữ liệu nên có tốc độ truy xuất rất nhanh
    • Memcached có khả năng mở rộng bằng cách liên kết nhiều server thành cụm.
    • Memcached sử dụng cấu trúc lưu trữ đơn giản key => value nên việc sử dụng và xử lý rất nhanh.
    • Memcached có thể sử dụng để lưu trữ dữ liệu SESSION cho PHP với các bước cấu hình đơn giản.
    • Ở mức nhỏ người ta thường dùng memcached để làm nơi lưu trữ dữ liệu chia sẻ, thường là lưu session. Cái này rất tiện lợi nhất là trong các kiểu loadbalancing đơn giản như nginx hay pound, khỏi phải lo tới vấn đề persistence session.
    • Ở mức lớn hơn một chút, người ta dùng memcached để giảm thiểu read từ db, cho những dữ liệu ít thay đổi và cần tính toán, query phức tạp, tốn tài nguyên.

Nhược điểm của Memcached

    • Sử dụng RAM Server để lưu trữ dữ liệu nên chi phí sử dụng khá cao.
    • Memcached không có cơ chế thẩm định tính chính xác của dữ liệu lưu trong nó. Điều này có thể thấy quá cấu trúc hệ thống (memcached không có bất cứ sự liên hệ nào với db, mà nằm độc lập).
    • Chưa đồng bộ tự động với dữ liệu database khi dữ liệu thay đổi. Ví dụ: Database có dữ liệu là A và Memcached cũng có dữ liệu là A. Lúc database đổi giá trị sang B nhưng memcached vẫn là A.

 

Hướng dẫn sử dụng Memcached lên Server Linux

Cài đặt Memcached lên Server

Trên Redhat/CentOS:

yum -y update && yum -y install memcached

Khởi động memcache:

systemctl start memcached && systemctl enable memcached

Mở port trên Firewalld nếu cho phép kết nối Memcached từ Server khác:

firewall-cmd --zone=public --permanent --add-port=11211/tcp && firewall-cmd --reload

Trên Debian/Ubuntu:

sudo apt-get update -y && sudo apt-get install memcached -y

Khởi động memcache:

sudo systemctl start memcached && sudo systemctl enable memcached

Mở port trên ufw nếu cho phép kết nối Memcached từ Server khác:

sudo ufw allow from 10.10.10.12 to any port 11211

Trong đó 10.10.10.12 là IP của Server muốn đến Memcached và 11211 là port của Memcached lắng nghe.

 

Cấu hình các thông số cho Memcached

Trên Redhat/CentOS

File cấu hình các thông số của Memcached nằm tại /etc/sysconfig/memcached

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

Các thông số cần chú ý như sau:

    • PORT: là port lắng nghe của Memcached
    • MAXCONN: là số lượng connection tối đa cho phép kết nối đến memcache.
    • CACHESIZE: là dung lượng RAM sử dụng để Cache đơn vị là MB.

Sau khi cấu hình xong, khởi động lại memcached:

systemctl restart memcached

Trên Debian/Ubuntu

File cấu hình các thông số của Memcached nằm tại /etc/memcached.conf

Các thông số cần chú ý như sau:

    • -m 64: là dung lượng RAM sử dụng để Cache đơn vị là MB.
    • -p 11211: là port lắng nghe của Memcached
    • -l 127.0.0.1: là địa chỉ ip trên server mà Memcache sẽ lắng nghe, nếu muốn các Server từ xa kết nối đến Memcache bạn cần chuyển 127.0.0.1 thành địa chỉ IP của server.
    • -c 1024: là số lượng connection tối đa cho phép kết nối đến memcache (mặc định thông số này bị comment).

Sau khi cấu hình xong, khởi động lại memcached:

sudo systemctl restart memcached

Sử dụng Memcached cho các ứng dụng

Cài đặt module Memcached cho PHP

Nếu muốn PHP truy cập được server Memcached thì cần cài thêm extension php memcached.

Trên Redhat/CentOS

yum -y install php-pecl-memcache

Khởi động lại service:

Nếu sử dụng Apache Web Server:

service htpd restart && service memcached restart

Nếu sử dụng Nginx Web Server:

service nginx restart && service php-fpm restart && service memcached restart

Trên Debian/Ubuntu

sudo apt-get install -y php-memcached

Khởi động lại service:

Nếu sử dụng Apache Web Server:

service apache2 restart && service memcached restart

Nếu sử dụng Nginx Web Server:

service nginx restart && service php-fpm restart && service memcached restart

Kiểm tra hoạt động

Sử dụng lệnh php -m | grep memcache nếu output có Memcache là được:

[root@zhost~]# php -m | grep memcache
memcache

Tạo một file info.php kiểm tra các thống số của PHP mới nội dung như sau:

<?php
    phpinfo();
?>

Mở trình duyệt web truy cập vào File info.php, nếu đã thấy Module Memcache thì đã thành công:

Cấu hình WordPress sử dụng Memcached

Khi bạn sử dụng Website chạy WordPress, hãy cài đặt Plugin W3 Total Cache.

Sau khi cài đặt và kích hoạt plugin, chọn tới Performance –> General Setting. Ở Page CacheDatabase Cache và Object Cache bạn chỉ cần chọn Memcached. Click nút Save Settings & Purge Caches. Thế là xong. Không cần cấu hình thêm.

Dùng Memcached lưu PHP SESSION

Như bạn đã biết, mỗi phiên làm việc của PHP có thể khởi tạo một biến $_SESSION để trao đổi lưu giữ dữ liệu giữa các phiên làm việc. Mặc định kết thúc phiên làm việc thì Session lưu ra một file trên Disk, và phục hồi cho phiên làm việc tiếp theo nếu cookie phù hợp. Nơi lưu các file session đặt ở thiết lập session.save_path trong php.ini

Để sử dụng Memcached để lưu trữ session nhằm để tăng tốc ứng dụng PHP thì bạn hãy mở file php.ini và thêm vào cuối thiết lập sau:

session.save_handler = memcached
session.save_path = "10.10.10.11:11211"
memcached.sess_locking = 0
memcached.sess_prefix = 'memc.sess.'

Trong đó 10.10.10.11 là IP của Memcached server, hãy thay bằng IP trên Server của bạn, hoặc localhost nếu PHP và Memcached nằm trên cùng một Server thật. memcached.sess_prefix thiết lập tiền tố các key lưu trong trong Memcache.

Sau đó khởi động lại Memcached và Service Web Server.

 

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

Leave a Reply

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