Mục lục
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
- 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 Cache, Database 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!