Hướng dẫn lưu PHP Session vào trong memcached trên CentOS VPS

6 năm trước

 

Đôi điều về Memcached

Memcahed là một kho lưu trữ bên trong bộ nhớ dưới dạng key - value dành cho các gói dữ liệu nhỏ lẻ và ngẫu nhiên như (như string hay object) được trả về từ hệ cơ sở dữ liệu , API hoặc một page nào đó.

Tại sao phải lưu các Session vào trong Memcached?

Memcached sẽ lưu các sesions và trong bộ nhớ thay vì trong files. Vì bộ nhớ sẽ xử lý nhanh hơn so với việc đọc file nên website của bạn sẽ vận hành hiệu quả hơn và đỡ tốn thời gian hơn.

Thế catch là gì?

Session sẽ chỉ được lưu vào trong bộ nhớ trong khi bộ nhớ không thể giữ lại data khi mà bạn tắt hoặc restart lại VPS , chính vì thế các session sẽ bị xóa sạch ngay sau khi bạn tắt máy.

 

Cài đặt

Trước khi cài công cụ này thì bạn sẽ phải cài đặt trước PHP 5.

Phải có một kho lưu trữ EPEL ,bạn sẽ phải cần nó cho Memcached vì Memcached không có sẵn trong kho lưu trữ cơ sở.

rpm -Uvh http://mirrors.kernel.org/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

Bạn nên update các gói dữ liệu cho phiên bản mới nhất (tuy nhiên không bắt buộc) .

yum update
 

Cài đặt memcached

Ta cùng bắt đầu cài đặt Memcached dùng command.

yum install memcached

Sau khi cài đặt thì mở file cấu hình của  Memcached với VI.

vi /etc/sysconfig/memcached

Bạn sẽ  thấy đoạn dữ liệu như sau:

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

Memcached không có lớp bảo vệ như mật khẩu hay tên người dùng, nên bất kỳ ai cũng có thể truy cập thông qua cổng 11211. Vậy nên ta sẽ điều chỉnh sao cho chỉ có VPS của chúng ta mới có thể truy cập được bằng cách chỉnh sửa trong mục 'OPTIONS=' :

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1"

Bạn nên thay đổi cachesize; theo mặc định là 64MB. Ngay khi đầy bộ nhớ , Memcached sẽ xóa hết những mục dữ liệu cũ để giải phóng bộ nhớ cho mục mới , tuy nhiên  64MB cũng khá là dư giả để sử dụng trừ phi bạn bạn có một website quá lớn.

Khởi động Memcached. 

/etc/init.d/memcached start

Memcached không khởi động theo mặc định được nên ta cần khởi động cho nó.

chkconfig --levels 235 memcached on
 

Cài đặt Memcached PHP Extension

Bắt đầu với việc cài đặt các công cụ phát triển để tạo source code:

yum groupinstall "Development Tools"

Sau đó sẽ cài thêm vài công cụ nữa. Hai công cụ đầu là để xây dựng extension , hai công cụ còn lại là để vận hành/ cài đặt extension trong PHP.

yum install zlib-devel libmemcached-devel php-pear php-pecl-memcached

Giờ thì ta sẽ cài PHP Memcached extension sử dụng PECL (PHP Extension Community Library) - thư viện PHP mở rộng - mà ta vừa cài xong.

pecl install -f memcached-1.0.0
 

Thay đổi PHP.ini để cài đặt Memcached với vai trò là Session Handler

Bước cuối cùng cần làm là định cấu hình PHP để sử dụng Memcached với vai trò như là session handler. Mở thư mục /etc/php.ini với VI.

vi /etc/php.ini

Tìm phần '[Session]' như mô tả bên dưới ( cuộn từ dưới lên cho dễ tìm ).

[Session]
; Handler used to store/retrieve data.
; http://www.php.net/manual/en/session.configuration.php#ini.session.save-handlersession.save_handler = files

Và đổi thành:

[Session]
; Handler used to store/retrieve data.
; http://www.php.net/manual/en/session.configuration.php#ini.session.save-handlersession.save_handler = memcached
session.save_path = "127.0.0.1:11211"

Như bạn thấy , chúng ta đã đổi session_handler thành memcached và đường dẫn tới hệ thống quản lý cục bộ là ở cổng số 11211 chính là địa chỉ Memcached hoạt động. Giờ thì restart lại Apache để tải lại file PHP.ini .

service httpd restart

Tất cả các session giờ đã được lưu trữ trong Memcached thay vì trong files.

Bạn có thể gặp lỗi sau:

Starting httpd: httpd: apr_sockaddr_info_get() failed for memcached
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Giải quyết bằng cách chỉnh sửa cấu hình Apache :

vi /etc/httpd/conf/httpd.conf

Và uncomment dòng  ServerName :

ServerName localhost
 

Kết luận

Memcached là một công cụ lý tưởng hỗ trợ việc lưu trữ những truy vấn chuyên sâu mà không cần phải tuân theo thời gian thực trên mỗi lần truy cập mà theo một chu kỳ quy định ( như 10 phút một lần).